• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:【C#】ラベルのダブルクリックについて)

【C#】ラベルのダブルクリックでテキストを代入する方法

このQ&Aのポイント
  • C#初心者の方からの質問です。現在、UserControl1を作成していますが、ラベルのダブルクリックで他のラベルにテキストを代入する方法がわかりません。
  • label1のクリックではパネルの背景色を変更する処理ができていますが、label1のダブルクリックが反応しない問題があります。
  • ご教授いただける方がいらっしゃいましたら、よろしくお願いいたします。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

VS2005で試してみましたが、ちゃんと動作しました。 原因としては、label1のDoubleClickイベントにlabel1_DoubleClickを呼び出すイベントハンドラが登録されていない、とか?? label1_DoubleClickメソッドを手書きしたのならその可能性があるかと。 その場合は、コンストラクタに次のコードを追加してみてください。 label1.DoubleClick += new EventHandler(label1_DoubleClick); また、ダブルクリックの場合でもクリックイベントは発生します。 完全に動作を分離する(ダブルクリック時はクリックイベント処理を行わない)には少々厄介かも。。。 クリック時にインターバルを0.5秒程度にしてタイマースタート。 ダブルクリックでなければ0.5秒後にタイマーのTickイベントでクリック時の処理を行う。 ダブルクリックだったらタイマー停止して、クリック処理を阻止。 以前は、こんな風に動作を分離したことがあります。.NETでも同じような手続きが必要になるのか、動作を分離してくれる機能があるのかは不明です。

sss-aoring
質問者

お礼

ご回答ありがとうございます。 ご指摘どおり、label1_DoubleClickメソッドを手書きしていたため、イベントハンドラが登録されていませんでした。 コードを追加すると、ちゃんと動作するようになりました! 今のところ、完全に分離しなくても問題なさそうです。 本当にありがとうございました!

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • ラベルをピクチャボックスの上に表示させたい

    PictureBox[,] map = new PictureBox[27, 27]; private void Form1_Load(object sender, EventArgs e) { for (int i = 1; i <= 25; i++) { for (int j = 1; j <= 25; j++) { map[i, j] = new PictureBox(); map[i, j].Size = new Size(tate, yoko);//用意する map[i, j].Location = new Point(tate * i + 5 * i, yoko * j + j * 5);//ずらす map[i, j].BackColor = Color.Black; this.Controls.Add(map[i, j]);//設置 bom_map[i, j] = 0; } } } ピクチャボックスの場合↑のように記述すると25×25のマップができあがりました。 それぞれのピクチャボックスの上に数字を表示させたいのですがうまくできません ちなみに、この様にソースを書いてみました private System.Windows.Forms.Label[,] label; private void Form1_Load(object sender, EventArgs e) { this.label = new System.Windows.Forms.Label[27, 27]; for (int i = 1; i <= 25; i++) { for (int j = 1; j <= 25; j++) { this.label[i, j] = new System.Windows.Forms.Label(); this.label[i, j].Size = new Size(tate, yoko); this.label[i, j].Location = new Point(tate * i + 5 * i, yoko * j + j * 5); this.label[i, j].Text = Convert.ToString(i * j); this.label[i, j].BackColor = Color.BlanchedAlmond; this.Controls.Add(this.label[i, j]); } } } ピクチャボックスと同じようにかぶせるのかな?と思い書いてみたんですが 何も表示されなくて困っています。 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#について・・・

    次のようなブログラムなのですが、ラジオボタンが上手く切り替わりません。 どこを修正すると上手くいくでしょうか? <<文字数オーバーのため省略>> 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# 2010 contextMenuStripのファンクション名の不

    C# 2010 contextMenuStripのファンクション名の不思議? まず2ケのメニューアイテムを持つcontextMenuStripを作り、それぞれのTEXTを試験1、試験3と改名します ダブルクリックするとハンドラーが出来て、その名称が(1)(2)のように TEXT名+ToolStripMenuItem_Click なります ここでいったんプロジェクトを終了して再ロードします 画像のように試験1と試験3の間に『試験3を途中に追加』を入れてダブルクリックして作ったファンクション名は前2者とは異なり (3)の如くtoolStripMenuItem1_Click となってしまいます なぜ 試験2を途中に追加ToolStripMenuItem_Click にならないのでしょうか? private void 試験1ToolStripMenuItem_Click(object sender, EventArgs e) --- (1) { } private void 試験3ToolStripMenuItem_Click(object sender, EventArgs e) --- (2) { } private void toolStripMenuItem1_Click(object sender, EventArgs e) --- (3) { } 追伸 『試験3を途中に追加』が長すぎるかと思い、『試験3』だけにしても結果は同じでした

  • C#でテキストボックスをクリック→フォームが開く→フォームで設定した値

    C#でテキストボックスをクリック→フォームが開く→フォームで設定した値を元のテキストボックスに入力 こんな感じのことをC#でやりたいのですがよくわからないので教えてください。 1. 親をForm1、子をForm2とします 2. Form1のTextBox1をクリックするとForm2が開いきます 3. Form2で設定した値をForm2の「入力」ボタンを押すとForm2が閉じてTextBox1に値が入力されます というものです。 ここで、textBoxは「クリックしたコントロール名を取得してForm2に渡したい」のです。 テキストボックスがたくさんあるので、textBox1とか決まった名前ではありません。 この部分がわからないのです。 ------------------------------------------------------- Form1: private void textBox1_Click(object sender, EventArgs e) {  Form2 fromItem = new Form2(sender);  DialogResult deRet = fromItem.ShowDialog(); } Form2: public Form2(object sender) {  InitializeComponent();  object pSender = sender; } private void button_input_Click(object sender, EventArgs e) {  ((System.Windows.Forms.TextBox)pSender).text = "hoge"; } ------------------------------------------------------- この程度しかわかりません。 正しい方法を教えてください。よろしくお願いいたします。

  • 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を実行したいのです。 初心者なのでわかりにくいと思いますが、宜しくお願いします。

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

    開発環境はMicrofoft visual stdio 2005 で開発言語はC#を使い、Windousアプリケーションでプログラミングしているのですが ループ中に、ラベルがクリックされたことを認識したいのです。ソースで説明すると private void Form1_Load(object sender, EventArgs e) {   while(1)   {     if(label1がクリックされたら・・・)     {     }     else if(label2がクリックされたら・・・)     {     }   } } このようなif文を書きたいのですが、よい方法はないでしょうか? よければ御知恵を貸してください。よろしくおねがいしますm(__)m

  • (Visual C#)カスタムコントロールで作ったリストのプロパティを

    (Visual C#)カスタムコントロールで作ったリストのプロパティを.Items[i]で参照できるように したいです。 具体的に言うと、 Form1…フォームアプリケーション MyList…フォームコントロールライブラリ MyListItem…フォームコントロールライブラリ の3つのソリューションがあります。 Form1にはMyListをデザイナーで、 MyListにはFlowLayoutPanelがあり その中にMyListItemを入れるようにコードを組んであります。 MyList.sln - UserControl1.cs using 省略 namespace MyList { public partial class UserControl1 : UserControl { public UserControl1() { InitializeComponent(); } public int Count = 0; public int SelectRow = -1; private MyListItem.MyListItem[] Mylistitem; private void Add (string URL, string Text, string ShowName, string Date){ Mylistitem[Count] = new MyListItem.MyListItem(); Mylistitem[Count].Text = Text + Count.ToString(); Mylistitem[Count].ImageURL = URL; Mylistitem[Count].ShowName = ShowName; Mylistitem[Count].Date = Date; Mylistitem[Count].Name = "MyListItem" + Count; Mylistitem[Count].Parent = this.flowLayoutPanel1; Mylistitem[Count].count = Count; this.Mylistitem[Count].Click += newEventHandler(this.MyListItem_Click); Count++; } private void button1_Click(object sender, EventArgs e) { Add("http://画像URL", "文字列1", "2", "3"); } private void UserControl1_Load(object sender, EventArgs e) { this.Mylistitem = new MyListItem.MyListItem[1000]; } } } MyListItem.sln - UserControl.csは省略します。 ここで質問なんですが、 Form1.csで、 private void TestMethod() { MyList1.Items[i].ImageURL = "http://画像URL"; } のようにしてMyList内のMyListItemのオブジェクト配列のなかで、 Count==iのものを探し、それのImageURLの値を変更することは可能でしょうか? 可能でしたら、その方法またはコードを教えていただけないでしょうか? 検索しても見つからなかったので質問しました。 回答よろしくお願いします。 あ、ちなみにVisual Studio 2010です。

  • 数字をピクチャボックスの上に表示させたい

    質問の内容を書いてくださいPictureBox[,] map = new PictureBox[27, 27]; private void Form1_Load(object sender, EventArgs e) { for (int i = 1; i <= 25; i++) { for (int j = 1; j <= 25; j++) { map[i, j] = new PictureBox(); map[i, j].Size = new Size(tate, yoko);//用意する map[i, j].Location = new Point(tate * i + 5 * i, yoko * j + j * 5);//ずらす map[i, j].BackColor = Color.Black; this.Controls.Add(map[i, j]);//設置 bom_map[i, j] = 0; } } } ピクチャボックスの場合↑のように記述すると25×25のマップができあがりました。 それぞれのピクチャボックスの上に数字を表示させたいのですがうまくできません ちなみに、この様にソースを書いてみました private System.Windows.Forms.Label[,] label; private void Form1_Load(object sender, EventArgs e) { this.label = new System.Windows.Forms.Label[27, 27]; for (int i = 1; i <= 25; i++) { for (int j = 1; j <= 25; j++) { this.label[i, j] = new System.Windows.Forms.Label(); this.label[i, j].Size = new Size(tate, yoko); this.label[i, j].Location = new Point(tate * i + 5 * i, yoko * j + j * 5); this.label[i, j].Text = Convert.ToString(i * j); this.label[i, j].BackColor = Color.BlanchedAlmond; this.Controls.Add(this.label[i, j]); } } } ピクチャボックスと同じようにかぶせるのかな?と思い書いてみたんですが 何も表示されなくて困っています。 C#初心者なのでよろしくおねがいします。

  • C#

    form2で入力した文字を form1で表示させたいのですが、上手くいきません。プログラムの(文字制限の為)一部だけ のせます。アドバイス よろしくお願いします。 まず、form1 public class Form1 : System.Windows.Forms.Form { private System.Windows.Forms.MainMenu mainMenu1; private System.Windows.Forms.MenuItem menuItem1; private System.Windows.Forms.MenuItem menuItem2; private System.Windows.Forms.Label label1; private Form2 form2; /// <summary> /// 必要なデザイナ変数です。 /// </summary> private System.ComponentModel.Container components = null; public Form1() { // // Windows フォーム デザイナ サポートに必要です。 // InitializeComponent(); form2= new Form2(); label1.Text=string.Format("{0}",form2.s); // // TODO: InitializeComponent 呼び出しの後に、コンストラクタ コードを追加してください。 // } static void Main() { Application.Run(new Form1()); } private void menuItem2_Click(object sender, System.EventArgs e) { if (form2.ShowDialog(this) == DialogResult.OK) this.Refresh(); } } 次にform2です private void button1_Click(object sender, System.EventArgs e) { string s; s=(string)textBox1.Text; } public string s { get { return s; } }