单击文本框后,如何在文本框下方显示表单?

问题描述:

目前Form1textBox1Form1具有StartPosition = CenterScreen,该textBox1textBox1_MouseClick单击文本框后,如何在文本框下方显示表单?

代码textBox1_MouseClick

private void textBox1_MouseClick(object sender, MouseEventArgs e) 
    { 
     Form2 frm2 = new Form2(); 
     frm2.ShowDialog(); 
    } 

Form2也已经StartPosition = CenterScreen当我点击textBox1Form2将覆盖textBox1

我想要发生的是它不会覆盖textBox1Form2将被显示时,它应该显示在textBox1之下它就像一个工具提示。我怎样才能做到这一点?

更新的代码:

private void textBox1_MouseClick(object sender, MouseEventArgs e) 
    { 
     Form2 frm2 = new Form2(); 
     frm2.StartPosition = FormStartPosition.Manual; 
     frm2.Location = new Point(this.Location.X + textBox1.Location.X, this.Location.Y + textBox1.Location.Y); 
     frm2.ShowDialog(); 

    } 

    private void textBox2_MouseClick(object sender, MouseEventArgs e) 
    { 
     Form2 frm2 = new Form2(); 
     frm2.StartPosition = FormStartPosition.Manual; 
     frm2.Location = new Point(this.Location.X + textBox2.Location.X, this.Location.Y + textBox2.Location.Y); 
     frm2.ShowDialog(); 
    } 

NO TEXTBOX点:

enter image description here

TextBox1的点:

enter image description here

TextBox2中CLICKED:

enter image description here

+0

更新我的问题:) – 2013-03-03 07:05:17

我之前发布的是一个长期的通用解决方案。为了快速解决手头的问题,您应该简单地这样做:

frmKeyboard.Location = this.PointToScreen(new Point(txtYourTextBox.Left, txtYourTextBox.Top + txtYourTextBox.Height)); 

你最好用UserControl代替表单来做。只需将UserControl的位置设置为(textbox1.Left,textbox1.Top + textbox1.Height)。

您应该在继承自标准TextBox的项目中添加一个自定义TextBox类,然后连线它的Enter/Leave事件,在其中显示/隐藏您的键盘控件并连线其“按键”事件以修改您的自定义文本框的文本。这将使您可以根据需要创建多个文本框实例。你甚至可以让你的键盘控件成为自定义TextBox的静态成员,以节省一些资源。

+0

,但我下TextBox1的文本框等? – 2013-03-03 05:46:14

+0

那么你想在哪里显示它呢?在右侧? – dotNET 2013-03-03 05:48:32

+0

下的textbox1,但它只是一个弹出,因为我真正想要发生的是,当一个点击文本框自定义键盘将显示,我曾经点击的键盘将显示在textbox1这就是为什么我想显示它下textbox1 – 2013-03-03 05:52:17

您也可以使用这样的事情:

private Point GetPosition() 
{ 
    return new Point(this.Location.X + this.textBox1.Location.X, this.Location.Y + this.textBox1.Location.Y); 
} 

private void button1_Click(object sender, EventArgs e) 
{ 
    Form2 fm = new Form2(); 
    fm.Location = this.GetPosition(); 
    fm.ShowDialog(); 
} 

这是不准确的呢。您必须将Form Borderwith添加到该位置。对于Form2集StartPosition =手册

+0

你是什么意思添加表格边框? – 2013-03-03 06:17:44

+0

this.Location包含您的标题栏和边框宽度,而textbox.Location是相对于表单矩形的。 – 2013-03-03 06:27:45

+0

哦,我将form2 formborderstyle设置为无 – 2013-03-03 06:31:36