0

目前Form1textBox1Form1StartPosition = CenterScreentextBox1textBox1_MouseClick

代码textBox1_MouseClick

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

Form2也有StartPosition = CenterScreen当我点击textBox1Form2覆盖的textBox1

我想要发生的是它不会覆盖textBox1何时Form2显示,它应该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();
    }

没有点击文本框:

在此处输入图像描述

点击文本框1:

在此处输入图像描述

点击文本框2:

在此处输入图像描述

4

3 回答 3

0

您最好使用 UserControl 而不是表单。只需将 UserControl 的位置设置为 (textbox1.Left, textbox1.Top + textbox1.Height)。

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

于 2013-03-03T05:41:38.083 回答
0

你也可以使用这样的东西:

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 = Manual

于 2013-03-03T06:13:37.243 回答
0

我之前发布的是长期的通用解决方案。要快速解决手头的问题,您只需执行以下操作:

frmKeyboard.Location = this.PointToScreen(new Point(txtYourTextBox.Left, txtYourTextBox.Top + txtYourTextBox.Height));
于 2013-03-03T07:23:52.273 回答