« ◇弦楽器のギャーと初期ビブラート | トップページ | ◆海面気圧サーバーと高度自動校正腕時計 »

◇VisualStudio2017備忘録

個人的備忘録

 編集時の妨害を減らす設定

VisualStudioの入力妨害機能を低減させる設定法のメモです。
人によって好みは異なると思います。

デバッグ
 オプション
  テキストエディター
   すべての言語
    タブ
     タブ
      タブのサイズ4
      インデントのサイズ3
      ◎空白の挿入
   C#
    全般
     自動括弧入力をoff
    コードスタイル
     インデント
      ブロックの内容をインデントする
      始めと終わりの括弧をインデントする
     改行
      新しい行の始めに括弧を配置するをoff

 開始(Form表示)イベントの取得法

Form表示イベントを取得するには、「FormXX.cs[デザイン]」を表示させ、 「表示」メニューで「プロパティウィンドウ(W)」を選択し

WI-1000X と QuietControl 30

出力されるプロパティウインドウで雷マークを選択すると、 イベントの一覧がでますので、 Loadを選択します。

WI-1000X と QuietControl 30

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;
            }
         }
面倒ですけど、しかたありません。。。。でも面倒。

|

« ◇弦楽器のギャーと初期ビブラート | トップページ | ◆海面気圧サーバーと高度自動校正腕時計 »

トラックバック

この記事のトラックバックURL:
http://app.f.cocolog-nifty.com/t/trackback/489055/72389405

この記事へのトラックバック一覧です: ◇VisualStudio2017備忘録:

« ◇弦楽器のギャーと初期ビブラート | トップページ | ◆海面気圧サーバーと高度自動校正腕時計 »