0

現在Form1has textBox1and Form1has StartPosition = CenterScreen, the textBox1hastextBox1_MouseClick

コードtextBox1_MouseClick

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

また、Form2StartPosition = CenterScreenクリックtextBox1 すると、Form2がカバーされ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();
    }

テキストボックスがクリックされていません:

ここに画像の説明を入力

TEXTBOX1 がクリックされました:

ここに画像の説明を入力

TEXTBOX2 がクリックされました:

ここに画像の説明を入力

4

3 に答える 3

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();
}

これはまだ正確ではありません。位置にFormBorderwithを追加する必要があります。Form2の場合、StartPosition=Manualに設定します

于 2013-03-03T06:13:37.243 に答える
0

フォームの代わりに UserControl を使用することをお勧めします。UserControl の位置を (textbox1.Left, textbox1.Top + textbox1.Height) に設定するだけです。

標準の TextBox から継承するプロジェクトにカスタム TextBox クラスを追加し、その Enter/Leave イベントをワイヤリングして、キーボード コントロールを表示/非表示にし、その「keypress」イベントをワイヤリングして、カスタム テキスト ボックスのテキストを変更する必要があります。これにより、テキストボックスのインスタンスを必要な数だけ作成できます。キーボード コントロールをカスタム TextBox の静的メンバーにして、リソースを節約することもできます。

于 2013-03-03T05:41:38.083 に答える
0

以前に投稿したのは、長期的な一般的な解決策です。目前の問題にすばやく対処するには、次のようにするだけです。

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