2015-11-11 79 views
0

我有這個問題:我需要把TextBox放在我的DataGridView的列標題上..找到這個我開始讀取列的矩形來檢索左邊的位置和寬度..c#datagridview如何對齊文本框的標題

Rectangle rec = dgv.GetColumnDisplayRectangle(mycolumnIndex, true); 

,這工作正常,但如果電網不包含任何行,則Rectangle是0 ..

什麼想法?

感謝

+0

我不能重現,矩形總是重新調諧接頭,不管療法是否是任何行或不的位置和寬度。 – TaW

+0

謝謝@TaW,但對於我來說,在Visual Studio 2013中,如果沒有行被選中,返回一個矩形0,0,0,0,因爲矩形是列區域,在標題下面 – ghiboz

回答

1

是否有任何與否或選擇行或不行,Rectangle返回從GetColumnDisplayRectangle始終是任何可見列正確。

如果Empty適合你,那麼你的Column要麼是無形滾動外的顯示區域。

您需要設置您的TextBox或其他Control的位置,在ColumnWidthChangedScroll事件之後。此外,無論何時您隱藏顯示列。

這裏是一個工作示例:

private void Form1_Load(object sender, EventArgs e) 
{ 
    textBox1.Parent = dataGridView1;    // nest the TextBox 
    placeControl(dataGridView1, textBox1, 2);  // place it over the 3rd column header 
} 


private void dataGridView1_ColumnWidthChanged(object sender, DataGridViewColumnEventArgs e) 
{ 
    placeControl(dataGridView1, textBox1, 2); 
} 

private void dataGridView1_Scroll(object sender, ScrollEventArgs e) 
{ 
    placeControl(dataGridView1, textBox1, 2); 
} 

void placeControl(DataGridView dgv, Control ctl, int index) 
{ 
    Rectangle R = dgv.GetColumnDisplayRectangle(index, true); // or false 
    ctl.Location = R.Location; 
    ctl.Size = new Size(R.Width, dgv.ColumnHeadersHeight); 
}