2013-03-03 44 views
0

目前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

回答

0

我之前發佈的是一個長期的通用解決方案。爲了快速解決手頭的問題,您應該簡單地這樣做:

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

你最好用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

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 =手冊

+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

相關問題