- PR -

【C#】TextBoxへのコントロール追加

投稿者投稿内容
セルカー
ベテラン
会議室デビュー日: 2004/04/08
投稿数: 70
投稿日時: 2007-04-24 17:03
いつもお世話になっています。
VS2005のC#で開発をしております。

テキストボックスにフォーカスが移った時、対象のテキストボックスの文字列が全選択されるようにしようと考えています。

カスタムコントロールで新しく作るのも、今まで作ったテキストボックスと置き換えることを考えると手間なので、オーバーライドを使って実現しようと考えているのですが、この場合オーバーライドはどのタイミングで行えばよろしいのでしょうか?

具体的には↓↓↓のソースで行おうと考えています。
class SelectAllTextBox : System.Windows.Forms.TextBox
{
protected override void OnEnter(EventArgs e)
{
base.OnEnter(e);

// 文字を全選択します
this.SelectAll();
}
}

ご教授宜しくお願いします。
KI
大ベテラン
会議室デビュー日: 2007/01/10
投稿数: 239
投稿日時: 2007-04-24 17:12
引用:
具体的には↓↓↓のソースで行おうと考えています。



「考えています」ということは、まだ試していないということでしょうか?
質問する前に試して、それで上手くいかなければ質問するようにしてください。

#ちなみに試してみましたが、それで上手くいきました。
セルカー
ベテラン
会議室デビュー日: 2004/04/08
投稿数: 70
投稿日時: 2007-04-24 17:41
すみません、質問としてはオーバーライドを行うタイミングをどこで行えばよいのか、ということです。

SelectAllTextBoxをクラスファイルに書き込んで、実行すれば、フォーム生成時にテキストボックスのコントロールとして追加されるものだと思っていたのですが、うまくいかないので、何か必要なものがあるのでしょうか?
KI
大ベテラン
会議室デビュー日: 2007/01/10
投稿数: 239
投稿日時: 2007-04-24 17:53
引用:

セルカーさんの書き込み (2007-04-24 17:41) より:

SelectAllTextBoxをクラスファイルに書き込んで、実行すれば、フォーム生成時にテキストボックスのコントロールとして追加されるものだと思っていたのですが


この部分の意味がよくわからないので、はっきりとは言えませんが、
継承とかオーバーライドの概念を誤解されているような気がします。

ご提示のコードは、TextBox を継承した SelectAllTextBox という名前の新しいクラスのものです。
仮にこのコードが含まれていたとしても、
フォームに貼り付けられている普通の TextBox は、普通のTextBox のインスタンスですから
フォーカスを受け取っても選択状態にはなりません。
普通の TextBox の代わりに SelectAllTextBox をフォームに貼り付ければ
お望みの動作をすると思います。

一度ビルドすると「ツールボックス」ウィンドウに SelectAllTextBox が追加されるので、
それをフォームに貼り付けて確認してみてください。
セルカー
ベテラン
会議室デビュー日: 2004/04/08
投稿数: 70
投稿日時: 2007-04-24 19:11
ご丁寧にありがとうございます。

たしかに、ツールボックスにSelectAllTextBoxが作成されており、希望通りの動きができました。

毎回TextBoxのEnterイベントにSelctAllを書かなくてもいいように、TextBoxに機能を追加するものだと考えていたのですが、全然違ったんですね・・・もう一度、オーバーライドについて勉強しなします。ありがとうございましたm(_ _)m

よねKEN
ぬし
会議室デビュー日: 2003/08/23
投稿数: 472
投稿日時: 2007-04-25 09:18
引用:

セルカーさんの書き込み (2007-04-24 17:03) より:
カスタムコントロールで新しく作るのも、今まで作ったテキストボックスと置き換えることを考えると手間なので、オーバーライドを使って実現しようと考えているのですが、この場合オーバーライドはどのタイミングで行えばよろしいのでしょうか?



カスタムコントロールについて誤解がないでしょうか?
セルカーさんの作ろうとしているものこそがカスタムコントロールです。
ですので、既に別の方からもご指摘のあるように
既存のTextBoxを使っている箇所をSelectAllTextBoxに置き換える必要があります。
うちうせん
ベテラン
会議室デビュー日: 2003/08/08
投稿数: 96
お住まい・勤務地: 福岡県
投稿日時: 2007-04-27 15:08
既知かもしれませんが。

今回のようにTextBox本来の機能に機能追加・機能変更を行う場合、TextBoxを継承したカスタムコントロールを作成します。
TextBoxから継承されたコントロールにはTextBoxのほぼ全機能が最初から引き継がれていいます。
そしてオーバーライトというのは今回のように継承元(TextBox)がもつ関数(OnEnter)を上書き(OverWrite)して、元々の機能を変更することをいいます。


_________________
by うちうせん

[ メッセージ編集済み 編集者: うちうせん 編集日時 2007-04-27 15:08 ]
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2007-04-27 16:19
引用:

うちうせんさんの書き込み (2007-04-27 15:08) より:

今回のようにTextBox本来の機能に機能追加・機能変更を行う場合、TextBoxを継承したカスタムコントロールを作成します。
TextBoxから継承されたコントロールにはTextBoxのほぼ全機能が最初から引き継がれていいます。
そしてオーバーライトというのは今回のように継承元(TextBox)がもつ関数(OnEnter)を上書き(OverWrite)して、元々の機能を変更することをいいます。


オーバーライト (Overwrite) ではありません。
オーバーライド (Override) です。
そして意味も違います。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌

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