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も見ています
-
新NISA制度は今までと何が変わる?非課税枠の拡大や投資対象の変更などを解説!
少額から投資を行う人のための非課税制度であるNISAが、2024年に改正される。おすすめの銘柄や投資額の目安について教えてもらった。
-
DataGrdViewに関連付けたデータの更新
C言語・C++・C#
-
CloseとDisposeの違い
Visual Basic(VBA)
-
VB.NETで DataRow()を利用して、値からコードを取得したい。
Visual Basic(VBA)
-
-
4
フルパスから最後のディレクトリ名を取得したい。
Visual Basic(VBA)
-
5
DataGridViewでセルクリックイベントを発生させるには
Visual Basic(VBA)
-
6
VB.NET DataGridView 縦スクロールバーを常に表示
Visual Basic(VBA)
-
7
「指定されたキャストは有効ではありません。」とエラーが出てしまいます。
Microsoft ASP
-
8
DataGridViewのチェックボックスのON、OFFの判定方法
C言語・C++・C#
-
9
インスタンス参照でアクセスできない。代わりに型名?
C言語・C++・C#
-
10
FORMが開いているかどうかの確認方法
Visual Basic(VBA)
-
11
DataGridViewに空白がある場合はエラーにしたい
Visual Basic(VBA)
-
12
DataGridViewで指定したセルの値を取得
Visual Basic(VBA)
-
13
VB.NETでのイベントの途中終了
Visual Basic(VBA)
-
14
DataGridViewの特定列に入力されている重複チェックをしたい
Visual Basic(VBA)
-
15
【VB】タブ切り替え時のイベント
Visual Basic(VBA)
-
16
VB.NETでコンボボックスの1行目を空白にしたい
Visual Basic(VBA)
-
17
メッセージボックスを大きくする方法
Visual Basic(VBA)
-
18
文字列の後ろから必要分だけ削除したい。
Visual Basic(VBA)
-
19
VB.NETでフォームロード中のエラー時に終了する方法について
Visual Basic(VBA)
-
20
ボタンクリックイベント 重複防止について
C言語・C++・C#
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
「ご処理進めて頂きますようお...
-
メルカリのメルカードで買い物...
-
エクセルで、日付を入力すると...
-
【Excel】特定の文字を含むセル...
-
switch の範囲指定
-
EXCEL VBA マクロ 実行する度に...
-
VBAでループ内で使う変数名を可...
-
VBA SaveChanges 上書きされない
-
レジ返品交換について(時間がか...
-
リョウ・・・量?料?
-
VBの質問#if 0 then ってどう...
-
VB6,Ifから抜けるには?
-
VB6 DoEventsの代わりは?
-
フォーム上のすべてのTextBoxを...
-
Do~Loopした回数をカウントしたい
-
Select Case文でこのようなこと...
-
Webアプリや業務アプリのデータ...
-
VBAで処理フラグの立て方
-
インタラクティブの反対語は?
-
Loadイベント中にほかのイベン...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
「ご処理進めて頂きますようお...
-
メルカリのメルカードで買い物...
-
エクセルで、日付を入力すると...
-
VBAでループ内で使う変数名を可...
-
【Excel】特定の文字を含むセル...
-
EXCEL VBA マクロ 実行する度に...
-
DoEventsがやはり分からない
-
UMLでの例外処理
-
月度は何て読みますか?
-
switch の範囲指定
-
VBの質問#if 0 then ってどう...
-
セルの値が0はクリアするマクロ
-
VB.NET Excelを読み込んでDataT...
-
Do~Loopした回数をカウントしたい
-
Loadイベント中にほかのイベン...
-
Select Case文でこのようなこと...
-
findは動くがfindnextがマクロ...
-
緊急です。 知り合いから50kgの...
-
リョウ・・・量?料?
-
理不尽、行き場のないイライラ...
おすすめ情報