- PR -

IPアドレス入力コントロール

1
投稿者投稿内容
YasuHiro1018
会議室デビュー日: 2006/07/16
投稿数: 18
投稿日時: 2008-05-02 15:59
お世話になります。

ネットワーク接続の「インターネット プロトコル (TCP/IP)」の
プロパティ画面にあるIPアドレス入力コントロールのようなものを
.NET Framework のコントロールとして作成したいと思い、
手始めに
コード:
using System;
using System.Windows.Forms;

namespace WindowsFormsApplication1 {

  public class IPAddress : Control {

    protected override CreateParams CreateParams {
      get {
        CreateParams createParams = base.CreateParams;
        createParams.ClassName ="SysIPAddress32";

        return createParams;
      }
    }

  }

}


と、クラスを作成したのですが、
[←]キー及び[→]キーを押下すると、キャレットが移動するのではなく、
他のコントロールへフォーカスが移動してしまいます。

createParams.ClassName を "EDIT" とした場合は、
ちゃんとキャレットが移動するのですが・・・

この現象は一体どういうことなのでしょうか。
コードで回避することは可能なのでしょうか。

以上、よろしくお願いいたします。
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2008-05-04 00:26
引用:

YasuHiro1018さんの書き込み (2008-05-02 15:59) より:

[←]キー及び[→]キーを押下すると、キャレットが移動するのではなく、
他のコントロールへフォーカスが移動してしまいます。


子コントロールが存在していないからでは...? たとえば Button コントロールなんかでもそうなります。 作るなら UserControl を継承して TextBox と Label を組み合わせた方が早いと思いますよ。 フォーカスの制御も思うとおりにできます。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
Azulean
大ベテラン
会議室デビュー日: 2008/01/04
投稿数: 123
お住まい・勤務地: 大阪府
投稿日時: 2008-05-04 01:06
引用:

子コントロールが存在していないからでは...?


同じ手順で作成したコントロールを貼り付けて実行し、Spy+で確認したところ、EDITクラスの子ウィンドウは4つあるようですね。
ぱっと見る限りは、XPでのTCP/IPのプロパティで使われているウィンドウと同一の構成になっています。

ただ、キー操作時の動き方が期待した結果と異なる理由については分かりません。
Hongliang
ぬし
会議室デビュー日: 2004/12/25
投稿数: 576
投稿日時: 2008-05-04 01:25
IsInputKey オーバーライドしてカーソルキーのときの前処理キャンセルかな。
YasuHiro1018
会議室デビュー日: 2006/07/16
投稿数: 18
投稿日時: 2008-05-09 22:31
返信が遅れました。申し訳ありません。

Hongliang さんのおっしゃる IsInputKey 辺りを調べて
再度挑戦したいと思います。

それで駄目なら、じゃんぬねっとさんのおっしゃる様に
UserControl を作成します。

レスありがとうございました。
またわからないことがあった時は宜しくお願いいたします。
1

スキルアップ/キャリアアップ(JOB@IT)