• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:ループ中にlabel_clickの読み込みを認識する)

ループ中にlabel_clickの読み込みを認識する

redfox63の回答

  • ベストアンサー
  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.1

あるプロシージャの中でループしているときに他のコントロールでのイベントを認識させるなら Application.DoEventsなどを呼び出してWindowsのメッセージポンプを機能させましょう LabelのClickイベント自体は別途記述して そのフォームクラスのフィールドにクリックされたのかどうかを記憶しておきます そのループ処理中でフィールドをチェックするようにすればいいと思います boolean lbl1Click= false, lbl2Click = false; などと宣言しておいて void lblClick( s as object, e as Eventargs ) {   Label lbl = (Label)s;   if ( lbl.Name == "label1 )   {     lbl1Click = true;   }   esle if ( lbl.Name == "label2" )   {     lbl2Click = true;   } } といった具合でクリックイベントを処理します ループ処理側では while( 1 ) {   Application.DoEvents();   if ( lbl1Click )   {     // Label1がクリックされた場合の処理   }   else if( lbl2Click )   {     // Label2がクリックされた場合の処理   } } といった具合でしょう …

lain_003
質問者

お礼

おお!できました! メッセージポンプについても勉強になりました。 ありがとうございましたm(__)m

関連するQ&A

  • VS2005 ボタンを自動クリック

    VS2005の初心者です。 ボタンを自動的にクリックするロジックがわかりません。 現在は以下のようになっています。 private void Form1_Load(object sender, EventArgs e) {   (本文) } private void btnSendMail_Click(object sender, EventArgs e) {   (本文) } 今は、Form1_Loadが実行して、ボタンを押すとbtnSendMail_Clickが実行します。 これを、Form1_Loadの中でbtnSendMail_Clickを実行したいのです。 初心者なのでわかりにくいと思いますが、宜しくお願いします。

  • 【C#】ラベルのダブルクリックについて

    初めて質問させていただきます。C#初心者です。よろしくお願いします。 開発環境はMicrosoft Visual C# 2008です。 現在、UserControl1を作成して、label1にはテキストを入れています。 ・label1をクリックすると、パネル(panel1)の背景色を変更。 ・label1をダブルクリックすると、他のラベル(atai_text)にlabel1内のテキストを代入。 ↑上記2つの処理をしたいのですが、クリックの方は処理できているのですが、ダブルクリックは反応せず、どのように作成すればよいかがわかりません。 <UserControl1.csの一部> private void label1_Click(object sender, EventArgs e) { if (this.label1.BackColor == Color.Pink) { this.panel1.BackColor = Color.FromArgb(0xFF, 0xFF, 0x80); } else { this.panel1.BackColor = Color.Pink; } } private void label1_DoubleClick(object sender, EventArgs e) { this.atai_text.Text = this.label1.Text; } どなたかご教授よろしくお願いします。

  • Labelコントロールに数字を代入する

    開発環境はMicrofoft visual stdio 2005 で開発言語はC#を使い、Windousアプリケーションでプログラミングしているのですが LabelにInt型の変数の中身を代入する方法がわかりません。 ソースコードで書くと int a = 10; label1.Text = a;//こうするとInt型をString型に変換できませんと         //で る 参考書などには数字を表示したいならTextBoxを使いなさいとよく書かれているのですが、今のプログラムはユーザーに数字の表示を変えられるといけないので、悩んでいます。 どなたかLabelにInt型を入れる方法か、ユーザーがコントロールできないようなLabelに代わるものを教えていただけないでしょうか>< よろしくお願いします。

  • C#について・・・

    次のようなブログラムなのですが、ラジオボタンが上手く切り替わりません。 どこを修正すると上手くいくでしょうか? <<文字数オーバーのため省略>> public Form1() { // // Windows フォーム デザイナ サポートに必要です。 // InitializeComponent(); if(isJapanStyle) { label5.Text=string.Format("0時0分0秒"); label6.Text=string.Format("0時0分0秒"); } else { label5.Text=string.Format("00:00:00"); label6.Text=string.Format("00:00:00"); } // // TODO: InitializeComponent 呼び出しの後に、コンストラクタ コードを追加してください。 // <<文字数オーバーのため 省略>> static void Main() { Application.Run(new Form1()); } protected void button1_Click(object sender, System.EventArgs e) { if(isJapanStyle) { label5.Text=string.Format("{0}時{1}分{2}秒",dt.Hour,dt.Minute,dt.Second); } else { label5.Text=DateTime.Now.ToString("T"); } recTime=dt; timer2.Stop(); timer3.Start(); } private void button2_Click(object sender, System.EventArgs e) { Application.Exit(); } private void timer1_Tick(object sender, System.EventArgs e) { dt=DateTime.Now; if(isJapanStyle) { label4.Text=string.Format("{0}時{1}分{2}秒",dt.Hour,dt.Minute,dt.Second); } else { label4.Text=DateTime.Now.ToString("T"); } } private void timer3_Tick(object sender, System.EventArgs e) { keika=dt-recTime; if(isJapanStyle) { label6.Text=string.Format("{0}時間{1}分{2}秒",keika.Hours,keika.Minutes,keika.Seconds); } else { label6.Text=string.Format("{0}:{1}:{2}",keika.Hours,keika.Minutes,keika.Seconds); } } private void timer2_Tick(object sender, System.EventArgs e) { timer3.Stop(); } private void radioButton2_CheckedChanged(object sender, System.EventArgs e) { isJapanStyle=false; } private void radioButton1_CheckedChanged(object sender, System.EventArgs e) { isJapanStyle=true; } } }

  • 【C#】EventArgsについて

    いつもお世話になります。 C#に関して質問です。 VisualC#2008を使っています。 private void Form1_Load(object sender, EventArgs e) などで見かける、EventArgs e とは何を意味しているのでしょうか? 誰か教えていただけませんか? よろしくお願いします。

  • Sleep(0)について

    VS2010C++でWindowsフォームアプリケーションをつくろうとしています。 ループさせたいイベント(button1)中に、button2のイベントを行いたいのでSleep(0)を使って以下のようにしました。 private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e) { while(1){ Sleep(0); // ループさせたいイベント ・・・・・・・・・・・・・・・・・・・・ } } private: System::Void button2_Click(System::Object^ sender, System::EventArgs^ e) {    ・・・・・・・・・・・・・・・・・・・・ } アプリケーション起動後button1をクリックすると、Sleep(0)が無いときと同じようにボタンを受け付けなくなります。 Sleep(0)の使い方が間違っているのでしょうか。

  • C#でオブジェクトの配列を使う

    開発環境はMicrofoft visual stdio 2005 で開発言語はC#を使い、Windousアプリケーションでプログラミングしているのですが オブジェクトを配列でせんげんし、オブジェクトのメンバを使うとエラーが出てしまいます。ソースコードで説明すると using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; namespace WindowsApplication1 {   public partial class Form1 : Form   {     public class car     {       int a;       public void set(int i)       {         a = i;       }     }     public Form1()     {       InitializeComponent();     }     private void label1_Click(object sender, EventArgs e)     {       car[] bike = new car[1];       bike[0].set(1);//ここでひっかかる     }   } } これをじっこうするとデバックは通るのですが、label1_Clickイベントが発生すると、「NULLの場所を参照しています」という意味のエラーが出てしまいます。 C#はほとんど初心者なので、初歩的なミスだとおもうんですが、 よろしければ御回答をお願いします。

  • c# イベントハンドラ 統一

    trackBarを複数配置しているのですが、そのtrackBarごとに private void trackBar1_Scroll(object sender, EventArgs e) { previewcolor(this.trackBar1.Value,'赤'); } private void trackBar2_Scroll(object sender, EventArgs e) { previewcolor(this.trackBar1.Value, '青'); } private void trackBar3_Scroll(object sender, EventArgs e) { previewcolor(this.trackBar1.Value, '緑'); } private void trackBar4_Scroll(object sender, EventArgs e) { previewcolor(this.trackBar1.Value, '透'); } こんな風に別々に記述する形になって非常にスッキリしないです。 これをジェネリクス?やデリゲート?などを使ってすっきりできないのでしょうか? visual stdio c# 2008を使ってます。 宜しくお願いします。

  • C#でボタン名を変更しても動く

    Visual Studio2010 Expを動かして、C#のWindows Applicationプロジェクトを作成しました。 フォーム、F_1にボタンB1を配置しました。B1をダブルクリックすると、 Form1.csに下記のように追加されました。 private void B1_Click(object sender, EventArgs e) 次に、B1をBTN1に変更しました。 private void B1_Click(object sender, EventArgs e)は変更されていないにも関わらずデバック実行が通ってしまいました。 質問1.なぜデバックの実行が通ってしまったのでしょうか? 質問2.自動でprivate boid BTN1_Clickに変更にはならないのでしょうか? Visual Studioは右も左もわからないレベルの人間です。何卒ご教授お願い致します。

  • MDIParent1に、ToolStripButton1とLabel1

    MDIParent1に、ToolStripButton1とLabel1、Label2を 配置しています。 やりたいことは  (1)ToolStripButton1をクリックしてForm1を表示させる。  (2)Label1をクリックしてForm1のTextをLabel1のTextに変更する。  (3)Label2をクリックしてForm1のTextをLabel2のTextに変更する。 最初に表示させたForm1のTextのみを変更させる。 現在下記のプログラムを実行したのですが Label1をクリックすると新たにForm1が表示されてしまいます。 (Form1のTextはLabel1のTextに変更されている) Label2をクリックすると新たにForm1が表示されてしまいます。 (Form1のTextはLabel2のTextに変更されている) クリックする毎にForm1がふえていきます。 対策方法を教えてください。 Public Class MDIParent1 Dim F1 As Form1  Private Sub ToolStripButton1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ToolStripButton1.Click Dim frm As New Form1 frm.MdiParent = Me frm.Show() End Sub   Private Sub Label1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Label1.Click F1 = New Form1 F1.Visible = True F1.Text = Label1.Text Label1.BorderStyle = BorderStyle.Fixed3D Label2.BorderStyle = BorderStyle.None End Sub   Private Sub Label2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Label2.Click F1 = New Form1 F1.Visible = True F1.Text = Label2.Text Label2.BorderStyle = BorderStyle.Fixed3D Label1.BorderStyle = BorderStyle.None End Sub End Class