
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で質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# C#テキストボックスの文字を配列にいれてその後表示する 4 2022/07/17 04:47
- Visual Basic(VBA) 【Excel VBA】自動メール送信の機能追加 5 2022/09/29 12:53
- C言語・C++・C# 大量のデータを読み込んで表示する速度を改善したい 8 2023/05/07 13:29
- C言語・C++・C# Windows Formアプリからコンソールを呼び出して文字を出力させたい 8 2023/05/09 10:53
- C言語・C++・C# C# DatagridviewにExcelシートを反映するとエラーが出る 2 2023/05/06 17:12
- その他(プログラミング・Web制作) google formsを使ったタスク依頼フォーム作成におけるご相談 1 2023/06/22 15:55
- Visual Basic(VBA) 九九の答えの計算 3 2022/12/20 22:13
- Visual Basic(VBA) EXCEL VBAにて動的にCheckBOXを複数作成し、同BOXにイベントを追加したい 1 2023/03/16 07:05
- Visual Basic(VBA) ①ExcelVBAでカレンダーを作り、別のユザーフォームで日付を入力したいのですがエラーになります。 1 2023/02/17 18:39
- Visual Basic(VBA) Visual Basic : ImageListの画像がそろったときにメッセージを表示 1 2023/07/20 13:53
このQ&Aを見た人はこんなQ&Aも見ています
-
CloseとDisposeの違い
Visual Basic(VBA)
-
FORMが開いているかどうかの確認方法
Visual Basic(VBA)
-
VB.NETでのイベントの途中終了
Visual Basic(VBA)
-
-
4
別フォームから戻ったときのイベント
Visual Basic(VBA)
-
5
DataGridView 列ごとの入力制限
Visual Basic(VBA)
-
6
VB.NETでボタンのクリックイベントハンドラが2回実行される
Visual Basic(VBA)
-
7
DataGridViewの特定列に入力されている重複チェックをしたい
Visual Basic(VBA)
-
8
Hideについて(.NET)
Visual Basic(VBA)
-
9
インスタンス参照でアクセスできない。代わりに型名?
C言語・C++・C#
-
10
VB.NETで DataRow()を利用して、値からコードを取得したい。
Visual Basic(VBA)
-
11
日付型のフィールドに空白を入れる方法を教えてください
その他(データベース)
-
12
フルパスから最後のディレクトリ名を取得したい。
Visual Basic(VBA)
-
13
DataGridViewでセルクリックイベントを発生させるには
Visual Basic(VBA)
-
14
Designer.vbは直接コードをいじってはだめ?
Visual Basic(VBA)
-
15
.NETアプリを作ったときの .manifest ファイルって必要なの
C言語・C++・C#
-
16
DoEventsがやはり分からない
Visual Basic(VBA)
-
17
visual studio でインデントを自動的に揃えるショートカットキー
その他(プログラミング・Web制作)
-
18
Form_Load と Form_Activate のタイミング
Visual Basic(VBA)
-
19
VBの画面サイズについて
Visual Basic(VBA)
-
20
データグリッドビューの一番最初の行に列を追加したい
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
「ご処理進めて頂きますようお...
-
UMLでの例外処理
-
【Excel】特定の文字を含むセル...
-
エクセルで、日付を入力すると...
-
VBAでループ内で使う変数名を可...
-
セックスレスの既婚女性は自慰...
-
switch の範囲指定
-
月度は何て読みますか?
-
ボタンクリックイベント 重複...
-
EXCEL VBA マクロ 実行する度に...
-
EXCEL VBA の For・・・Next ...
-
TextBoxに日付を自動的に入れる
-
リョウ・・・量?料?
-
フローチャートの結合子
-
Googleマップのストリートビュ...
-
マクロで、質問です。 Find関数...
-
C#です。リストボックスの項目...
-
2重のDo~Loopは?
-
Loadイベント中にほかのイベン...
-
生活保護受給者は性欲をどんな...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
「ご処理進めて頂きますようお...
-
エクセルで、日付を入力すると...
-
VBAでループ内で使う変数名を可...
-
【Excel】特定の文字を含むセル...
-
switch の範囲指定
-
EXCEL VBA マクロ 実行する度に...
-
UMLでの例外処理
-
DoEventsがやはり分からない
-
月度は何て読みますか?
-
お家デートをしててハグを長い...
-
VB.NET Excelを読み込んでDataT...
-
VBの質問#if 0 then ってどう...
-
Do~Loopした回数をカウントしたい
-
VBAでCOPYを繰り返すと、処理が...
-
メルカリのメルカードで買い物...
-
インタラクティブの反対語は?
-
Loadイベント中にほかのイベン...
-
リョウ・・・量?料?
-
vba 空のデータをSplitする時の...
-
findは動くがfindnextがマクロ...
おすすめ情報