簡體   English   中英

如何確保必須滾動的UserControl中控件的可見性?

[英]How do I ensure visibility of a control in a UserControl that has to be scrolled?

我有一個其中包含許多組件的UserControl(我使用WinForms),如果要查看某個組件,則必須向上/向下或向左/向右滾動。 現在,我想實現一個搜索框,該搜索框將允許您搜索組件,並在結果中選擇它(一個datagridview)時,UserControl將滾動以確保您可以看到所選的組件。

我的第一個想法是檢查組件位置是否大於ClientSize,例如:

if (ivrMenu.X > _designerControl.ClientSize.Width && ivrMenu.Y > _designerControl.ClientSize.Height)
    MessageBox.Show("Down-Right");
else if (ivrMenu.X > _designerControl.ClientSize.Width)
    MessageBox.Show("Right");
else if (ivrMenu.Y > _designerControl.ClientSize.Height)
    MessageBox.Show("Down");

顯然,這僅在H和V的滾動位置都為0的情況下才有效。因此,我必須考慮當前Scrolling Position的位置,否則我可以滾動到位置0,然后滾動到組件,但是看起來不太好。

我的問題是,如何考慮滾動? 如何通過滾動“位置”計算可見區域的位置?

您可以嘗試使用datagridview

1) theGridView.FirstDisplayedScrollingRowIndex = theGridView.SelectedRows[0].Index;

2) theGridView.CurrentCell = theGridView.Rows[index].Cells[0];

第二個將滾動到該項目,而無需將其移動到視圖頂部。

我對ClientSize,AutoScrollPosition和組件的大小進行了一些數學運算,此代碼似乎可以正常工作:

if (ivrMenu.X + ivrMenu.Width < _designerControl.AutoScrollPosition.X * (-1))
    MessageBox.Show("Left");

if (ivrMenu.X + ivrMenu.Width > _designerControl.ClientSize.Width - _designerControl.AutoScrollPosition.X)
    MessageBox.Show("Right");

if (ivrMenu.Y + ivrMenu.Height < _designerControl.AutoScrollPosition.Y * (-1))
    MessageBox.Show("Up");

if (ivrMenu.Y + ivrMenu.Height > _designerControl.ClientSize.Height - _designerControl.AutoScrollPosition.Y)
    MessageBox.Show("Down");

這是組件(在我的情況下為ivrMenu)在visibe ClientArea之外的位置。 由此,我只需要進行滾動即可使組件適合屏幕。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM