2012-03-24 5 views
2

私はLabel1、TextBox1、Button1も含むGroupBox1を含むフォームを持っています。 GroupBox1.Enablesはfalseです。 TextBox1でMouse_Clickをキャプチャまたはシミュレートできますか?はい、あなたは、これは非常に簡単に次のコード行でマウスボタンのキャプチャ

+0

タイトルに「C#」などのプレフィックスを付けないでください。それがタグのためのものです。 –

+0

ジョンさん、ありがとうございました! – meYnot

+0

回答者はあなたがしたいことを理解するのが少し難しいと思っています。少し質問を書いて、あなたが探している機能(エンドユーザの場合)を追加すると、より良い答え。 – dmportella

答えて

1

私は解決策を作成しました。ご意見をお寄せください

using System; 
using System.Windows.Forms; 
using System.Drawing; 

//$/t:winexe 
//& RunInOwnWindow 

namespace PowerAPP 
{ 
    public class MainForm : Form 
    { 
     #region Initialization 
     private System.Windows.Forms.GroupBox groupBox1; 
     private System.Windows.Forms.Button button1; 
     private System.Windows.Forms.TextBox textBox1; 
     private System.Windows.Forms.Label label1; 
     private System.Windows.Forms.TextBox textBox2; 
     private System.Windows.Forms.Label label2; 

     private static void Main(string [] args) 
     { 
      Application.EnableVisualStyles(); 
      Application.SetCompatibleTextRenderingDefault(false); 
      Application.Run(new MainForm()); 
     } 
     MainForm() 
     { 
      groupBox1 = new System.Windows.Forms.GroupBox(); 
      button1 = new System.Windows.Forms.Button(); 
      textBox1 = new System.Windows.Forms.TextBox(); 
      label1 = new System.Windows.Forms.Label(); 
      textBox2 = new System.Windows.Forms.TextBox(); 
      label2 = new System.Windows.Forms.Label(); 

      // button1 
      button1.Name = "Button1"; 
      button1.Location = new System.Drawing.Point(101, 90); 
      button1.Size = new System.Drawing.Size(75, 24); 
      button1.Text = "button1"; 

      // textBox1 
      textBox1.Name = "TextBox1"; 
      textBox1.Location = new System.Drawing.Point(76, 25); 
      textBox1.Size = new System.Drawing.Size(100, 20); 

      // label1 
      label1.Name = "Label1"; 
      label1.Bounds = new Rectangle(35, 22, 146, 28); 
      label1.BackColor = System.Drawing.Color.Yellow; 
      label1.Text = "label1"; 

      // textBox2 
      textBox2.Name = "TextBox2"; 
      textBox2.Location = new System.Drawing.Point(76, 55); 
      textBox2.Size = new System.Drawing.Size(100, 20); 

      // label2 
      label2.Name = "Label2"; 
      label2.Bounds = new Rectangle(35, 52, 146, 28); 
      label2.BackColor = System.Drawing.Color.Yellow; 
      label2.Text = "label2"; 

      groupBox1.Name = "GroupBox1"; 
      groupBox1.Controls.Add(button1); 
      groupBox1.Controls.Add(textBox1); 
      groupBox1.Controls.Add(label1); 
      groupBox1.Controls.Add(textBox2); 
      groupBox1.Controls.Add(label2); 

      groupBox1.Location = new System.Drawing.Point(35, 34); 
      groupBox1.Size = new System.Drawing.Size(200, 128); 
      groupBox1.Text = "groupBox1"; 

      // MainFORm 
      Name = "MainFOrm"; 
      ClientSize = new System.Drawing.Size(292, 266); 
      Controls.Add(groupBox1); 
      Text = "Click Fields to include"; 
      MouseClick += new System.Windows.Forms.MouseEventHandler(MainForm_MouseClick); 

      groupBox1.Enabled = false; 
     } 
     #endregion 

     private void MainForm_MouseClick(object sender, MouseEventArgs e) 
     { 
      Point pt = new Point(e.X, e.Y); 
      Locate_Point_in_Control_Bounds(this, pt); 
     } 

     private void Locate_Point_in_Control_Bounds(Control ctl, Point pt) 
     { 
      Rectangle r; 
      if (ctl is Form || ctl.HasChildren) 
      { 
       foreach (Control c in ctl.Controls) 
       { 
        if (c.HasChildren) Locate_Point_in_Control_Bounds(c, pt); 
        r = c.Bounds; 
        r.Offset(ctl.Left, ctl.Top); 
        if (r.Contains(pt)) 
         MessageBox.Show(c.Name); 
       } 
      } 
      else 
      { 
       r = ctl.Bounds; 
       r.Offset(ctl.Left, ctl.Top); 
       if (r.Contains(pt)) 
        MessageBox.Show(ctl.Name); 
      } 
     } 
    } 
} 
+0

あなたは自分の答えを受け入れることができます.... –

0

を行うことができます。

private void button1_Click(object sender, EventArgs e) 
    { 
     //Disable the groupBox with textBox1 in it 
     groupBox1.Enabled = false; 

     //Simulate the Click on textBox1 
     textBox1_MouseClick(this, new MouseEventArgs(MouseButtons.Left, 1,0,0,0)); 
    } 

    private void textBox1_MouseClick(object sender, MouseEventArgs e) 
    { 
     MessageBox.Show("Test"); 
    } 

上記のコードは、別のコントロールにすることができ、私はちょうど例えばButton1を使用。

更新1: グループボックスが有効かどうかは関係ありませんが、textBox1_MouseClick(...)で直接イベントを呼び出すと、常にイベントがキャッチされます。

挨拶

+1

試しましたか?それは動作しません。 –

+0

Mario、返信いただきありがとうございますが、GroupBox1.Enabled = false; – meYnot

+0

はい私はそれを試して、それは動作します。私はそれを証明するためにコードを更新しました。 –

2

コメントの代わりに回答を投稿することをお勧めします。親を無効にしてから、TextBoxのイベントは発生しません。技術的には、IMessageFilterインターフェイスを実装してその問題を回避できます。しかし、あなたはそれを回避しようとしないことが重要であり、これはすべて設計によって動作し、は決してになります。

あなたのユーザーは、このようなクリックが有用な何かを何百万年も費やすことは決してありません。無効にしておくと、は非常にになります。それが必要です。クリックがあれば、おそらく事故になります。あなたは、事故を起こしたり、完全に発見できないコードの機能を公開したりすることはありません。

+0

あなたは正しいですが、私はいくつかの管理者のコントロールとオプションのためにボタンを追加するよりもスペースを確保する必要があります。 – meYnot

+0

私はそれが何を意味するのか分かりません。おそらくそれは言語の壁ですが、言葉で表現するのが難しい場合は、通常はコードで記述することも難しくなります。たぶんあなたはそれについて少し考えなければなりません。そして、それを使用する必要があるその管理者に話すと、ユーザーのフィードバックは常に良いです。 –

+0

ありがとうHans、私の意味は、管理者には高度な機能があるということです。 私はMouse_Click点(x、y)をグラップすることを考えていて、TextBox1 thoの矩形を取得します! – meYnot

関連する問題