
VisualC# .net です。
フォームを表示する場合に
コンストラクタが呼ばれその後ロードイベントで
フォームのコントロールの初期設定を行っています。
(この方法がまちがっている?)
ロードイベント内でコンボボックスの初期設定を行うと
コンボボックスのイベントが発生してしまいます。
以下参照にて
このイベントでメッセージを表示しているのですが
初期設定では出てほしくありません。
そこで、
これを防ぐためには以下のようにフラグを立てるような
方法しかないのでしょうか?
それともDebugger.IsAttached のようなものが
用意されているのでしょうか
public bool iload = false; (←仮フラグを追加)
private void Form1_Load(object sender, EventArgs e)
{
iload = true; (←仮フラグを登録)
ComboBox1.SeletedIndex = 0;
iload = false; (←仮フラグを削除)
}
private void ComboBox1_SelectedIndexChanged(object sender, EventArgs e)
{
if (iload) return; (←仮フラグ登録時はなにもしない)
MessageBox.Show("変更しました");
}
No.2ベストアンサー
- 回答日時:
SelectedItemChanged()で他にも処理をするようですし、フラグでいいんではないでしょうか。
Loadが終わったかどうかを判断するプロパティは無いと思います。
どうしてもプロパティやメソッドとして制御したいようなら、フォームにスーパークラスを作るとか、
アクセサにすればいいのでは。
個人的にはフラグはあまり使いたくありませんが。
ありがとうございます。
やはり存在しないみたいですね
とりあえず私も調べてそれらしいのをみつけました。
DesignModeっていうのがあるみたいですけど使えないみたいですね。
私もフラグは好きじゃないので質問をさせてもらったのですけど
とりあえず今回はフラグを使用して対応しておきます。
スーパークラスは作れないです。作り方わからないです。
たぶん、サブクラス作って、内部でフラグを使用するぐらいしか思いつかないです。
No.1
- 回答日時:
Load中は、イベントを削除すればいいでしょう。
private void Form1_Load(object sender, EventArgs e)
{
// イベントハンドラの削除
comboBox1.SelectedIndexChanged -= comboBox1_SelectedIndexChanged;
// 色々な処理
// イベントハンドラの追加
comboBox1.SelectedIndexChanged += comboBox1_SelectedIndexChanged;
}
もしくは、デザイナ上でイベントハンドラを紐づけておかず(プログラムのみ記述しておく)、
イベントが完了後にイベントハンドラを追加すればいいです。
コンストラクタで当然InitializeComponent()が呼ばれるわけですが、
その中でイベントハンドラが設定されるのが問題でしょう。
どうしてもイベントハンドラ周りの制御をいじりたくないというのならば、
質問に記されているような制御を行うことになるでしょう。
また、どのような制御を行っているのかわかりませんが、初期化時にイベントが走行しても
なんら影響のでないコードになっていれば、問題ないと思います。
逆に言うと、初期化によって選択されている値が変更されたにも関わらず、そのタイミング
で処理すべき処理が行われないとすると、そちらの方が影響を及ぼしたりはしないでしょうか?
この回答への補足
<<元々>>
private void Form1_Load(object sender, EventArgs e)
{
ComboBox1.SeletedIndex = 0;
}
private void ComboBox1_SelectedIndexChanged(object sender, EventArgs e)
{
Function(ComboBox1.Text);
MessageBox.Show("変更しました");
}
処理的には問題なく動作します。
ただ、同じ処理が数か所存在しているので
起動前にメッセージ文をユーザーがクリックして
何度もメッセージ消去するのはおかしいですよね。
ロード後にイベントを定義するという方法ですが、
これだと初期設定(ロード)時の処理が反映されなくなるのではないでしょうか?
<<変更後:現実>>
public bool iload = false;
private void Form1_Load(object sender, EventArgs e)
{
iload = true;
ComboBox1.SeletedIndex = 0;
iload = false;
}
private void ComboBox1_SelectedIndexChanged(object sender, EventArgs e)
{
Function(ComboBox1.Text);
if(iload == false) MessageBox.Show("変更しました");
}
<<変更後:理想(Debugger.IsAttachedのようなEvent.Executeがあれば>>
private void Form1_Load(object sender, EventArgs e)
{
ComboBox1.SeletedIndex = 0;
}
private void ComboBox1_SelectedIndexChanged(object sender, EventArgs e)
{
Function(ComboBox1.Text);
if(!Event.Execute) MessageBox.Show("変更しました");
}
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
CloseとDisposeの違い
Visual Basic(VBA)
-
VB.NETでボタンのクリックイベントハンドラが2回実行される
Visual Basic(VBA)
-
VB.NETで DataRow()を利用して、値からコードを取得したい。
Visual Basic(VBA)
-
-
4
VB.NETでのイベントの途中終了
Visual Basic(VBA)
-
5
DataGridViewでセルクリックイベントを発生させるには
Visual Basic(VBA)
-
6
別フォームから戻ったときのイベント
Visual Basic(VBA)
-
7
日付型のフィールドに空白を入れる方法を教えてください
その他(データベース)
-
8
VB6.0の「vbFromUnicode」はVB.NETではどれに相当しますか?
Visual Basic(VBA)
-
9
Hideについて(.NET)
Visual Basic(VBA)
-
10
C# DataGridView のヘッダーセル中央揃え
C言語・C++・C#
-
11
DoEventsがやはり分からない
Visual Basic(VBA)
-
12
vb.netで画面のコントロールId名を変数で動的に制御し処理する方法
Visual Basic(VBA)
-
13
データグリッドビューの一番最初の行に列を追加したい
Visual Basic(VBA)
-
14
VB2008 comboboxを連動させた際のエラー
Visual Basic(VBA)
-
15
visual studio でインデントを自動的に揃えるショートカットキー
その他(プログラミング・Web制作)
-
16
C# DataTableに最後に追加した行をDataGridView上で選択状態にする方法は?
C言語・C++・C#
-
17
ラジオボタンの初期指定
Visual Basic(VBA)
-
18
CSVファイルの中で、「 , 」カンマを使いたい
その他(コンピューター・テクノロジー)
-
19
【VB】タブ切り替え時のイベント
Visual Basic(VBA)
-
20
フルパスから最後のディレクトリ名を取得したい。
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
「ご処理進めて頂きますようお...
-
UMLでの例外処理
-
VBAでループ内で使う変数名を可...
-
尻毛って処理する?。
-
VBAでCOPYを繰り返すと、処理が...
-
エクセルで、日付を入力すると...
-
銀行の窓口処理の件で知ってる...
-
月度は何て読みますか?
-
【Excel】特定の文字を含むセル...
-
DoEventsがやはり分からない
-
インタラクティブの反対語は?
-
EXCEL VBA マクロ 実行する度に...
-
VBの質問#if 0 then ってどう...
-
メルカリのメルカードで買い物...
-
セックスレスの既婚女性は自慰...
-
フォーム上のすべてのTextBoxを...
-
VB6のMSFlexGridでセルをマージ...
-
FFTの結果ついて
-
リョウ・・・量?料?
-
コンボボックスの値判定
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
「ご処理進めて頂きますようお...
-
エクセルで、日付を入力すると...
-
銀行の窓口処理の件で知ってる...
-
VBAでCOPYを繰り返すと、処理が...
-
VBAでループ内で使う変数名を可...
-
【Excel】特定の文字を含むセル...
-
VBの質問#if 0 then ってどう...
-
月度は何て読みますか?
-
EXCEL VBA マクロ 実行する度に...
-
UMLでの例外処理
-
switch の範囲指定
-
メルカリのメルカードで買い物...
-
DoEventsがやはり分からない
-
お家デートをしててハグを長い...
-
セックスレスの既婚女性は自慰...
-
リョウ・・・量?料?
-
findは動くがfindnextがマクロ...
-
取り消し線が入った文字を削除...
-
生活保護受給者は性欲をどんな...
-
Loadイベント中にほかのイベン...
おすすめ情報