◇VisualStudio2017備忘録
個人的備忘録
編集時の妨害を減らす設定
VisualStudioの入力妨害機能を低減させる設定法のメモです。
人によって好みは異なると思います。
デバッグ オプション テキストエディター すべての言語 タブ タブ タブのサイズ4 インデントのサイズ3 ◎空白の挿入 C# 全般 自動括弧入力をoff コードスタイル インデント ブロックの内容をインデントする 始めと終わりの括弧をインデントする 改行 新しい行の始めに括弧を配置するをoff
開始(Form表示)イベントの取得法
Form表示イベントを取得するには、「FormXX.cs[デザイン]」を表示させ、 「表示」メニューで「プロパティウィンドウ(W)」を選択し
出力されるプロパティウインドウで雷マークを選択すると、 イベントの一覧がでますので、 Loadを選択します。
FormXX.csに_Load関数が追加されます。
private void Form1_Load(object sender, EventArgs e) { // 開始時処理を書く }
終了の確認(Form閉じ確認)
前項と同様の手続きでFormClosingイベント取得を定義します。
private void Form1_FormClosing(object sender, FormClosingEventArgs e) { DialogResult dr= MessageBox.Show("終了しますか?" ,Application.ProductName ,MessageBoxButtons.YesNo ,MessageBoxIcon.Question); if (dr == DialogResult.No){ e.Cancel = true; // 終了させない指定 } }
終了イベント(Form閉じイベント)取得
前項と同様の手続きでFormClosingイベント取得を定義します。
private void Form1_FormClosed(object sender, FormClosingEventArgs e) { // 終了処理(USB資源解放など) }
終了イベント取得-2
Application.ApplicationExit登録を行う方法もあります。
private void Form1_Load(object sender, EventArgs e) { Application.ApplicationExit += new EventHandler(Application_ApplicationExit); } private void Application_ApplicationExit(object sender, EventArgs e) { Application.ApplicationExit -= new EventHandler(Application_ApplicationExit); // 終了処理(USB資源解放など) }
他スレッドからForm要素にアクセス
ごく普通のプログラムに置いてはUIと実動作部は当然別スレッドとなります。 余程特殊なプログラムでない限りUIが固まることは許されません。
残念ながらVisualStudioC#ではUIスレッド以外からUI部品に値変更を伴うアクセスを行うことはできません。
(値の参照のみであれば大丈夫なようです)
次のようにしてdelegate関数を定義し、invokeによりUIスレッドで実際の動作を行うようにします。
この記述をすれば、別スレッドでSetText2を呼べば、改めてUIスレッドでSetText2が呼びなおされ、textBo2.Textに値がセットされます。
delegate void SetTextCallback(string text); private void SetText2(string text) { if (this.textBox2.InvokeRequired) { // invokeが必要かチェック SetTextCallback d = new SetTextCallback(SetText2); this.Invoke(d, new object[] { text }); } else { this.textBox2.Text = text; } }面倒ですけど、しかたありません。。。。でも面倒。
| 固定リンク