查找行控制指标加入到TableLayoutPanel中 [英] Find row index of control added to TableLayoutPanel
问题描述
我要采取行动时,控件添加到Windows窗体一个TableLayoutPanel。我处理控制的ParentChanged事件,以找出是否该控件添加到父(这里TableLayoutPanel中),但我收到指数为-1。
的TableLayoutPanel吨;
私人无效的button1_Click(对象发件人,EventArgs的)
{
// this.Text = tableLayoutPanel1.Height.ToString();
T =新的TableLayoutPanel();
t.Dock = DockStyle.Fill;
//t.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink;
t.AutoSize = TRUE;
//t.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink;
t.RowStyles.Add(新RowStyle(SizeType.AutoSize));
t.RowStyles.Add(新RowStyle(SizeType.AutoSize));
t.ColumnStyles.Add(新ColumnStyle(SizeType.Percent,50));
t.ColumnStyles.Add(新ColumnStyle(SizeType.Percent,50));
panel1.Controls.Add(T);
t.CellBorderStyle = TableLayoutPanelCellBorderStyle.Single;
标签LBL =新的Label();
lbl.ParentChanged + =新的EventHandler(lbl_ParentChanged);
lbl.Margin =新System.Windows.Forms.Padding(20,150,20,20);
lbl.Text =你好;
t.Controls.Add(LBL,0,0);
}
无效lbl_ParentChanged(对象发件人,EventArgs的)
{
标签LBL =(标签)发送;
INT行= t.GetRow(LBL); //这里我得到行= -1 ??????
}
我需要排至该控件添加号码。该控制应采取行动独立当它被添加到所述的TableLayoutPanel的。如何得到它?
无效t_ControlAdded(对象发件人,ControlEventArgs E)
{
INT行= t.GetRow(e.Control); //这也给排= -1
}
您需要增加行数/列数
,如果添加新的 RowStyles / ColumnStyles
您的TableLayoutPanel
。在此之后,你可以很容易地使用 GetPositionFromControl(控制值)
方法。
我觉得, ControlAdded
事件是在这种情况下,更好的办法。试试看吧。
做这样的:
公共部分类Form1中:形态
{
私人TableLayoutPanel中板;
公共Form1中()
{
的InitializeComponent();
InitializeTableLayoutPanel();
}
私人无效Form1_Load的(对象发件人,EventArgs的)
{
的AddControl(0,0);
的AddControl(0,1);
的AddControl(1,0);
的AddControl(1,1);
的AddControl(2,0);
的AddControl(2,1);
的AddControl(3,0);
的AddControl(3,1);
}
私人无效InitializeTableLayoutPanel()
{
面板=新的TableLayoutPanel();
panel.Dock = DockStyle.Fill;
panel.AutoSize = TRUE;
panel.ColumnStyles.Add(新ColumnStyle(SizeType.Percent,50));
panel.ColumnStyles.Add(新ColumnStyle(SizeType.Percent,50));
panel.ColumnCount = 2;
panel.RowStyles.Add(新RowStyle(SizeType.AutoSize));
panel.RowStyles.Add(新RowStyle(SizeType.AutoSize));
panel.RowCount = 2;
panel.CellBorderStyle = TableLayoutPanelCellBorderStyle.Single;
panel.ControlAdded + =新ControlEventHandler(OnControlAdded);
this.Controls.Add(板);
}
私人无效OnControlAdded(对象发件人,ControlEventArgs E)
{
如果(e.Control!= NULL)
{
INT列= panel.GetPositionFromControl(e.Control).COLUMN;
INT行= panel.GetPositionFromControl(e.Control).Row;
的MessageBox.show(的String.Format(列:{0},行:{1},列,行));
}
}
///<总结>
///添加到控制面板
///< /总结>
///< PARAM NAME =栏>列位置< /参数>
///< PARAM NAME =行>行位置和LT; /参数>
私人无效的AddControl(INT列,诠释行)
{
标签标签=新的Label();
label.Font =新的字体(新的FontFamily(德罗伊德桑),20,FontStyle.Bold);
label.Name =标签;
label.Text =呐喊!;
如果(列< panel.ColumnCount和放大器;&安培;行< panel.RowCount)
panel.Controls.Add(标签,列,行);
其他
抛出新ArgumentOutOfRangeException();
}
}
I need to take an action when a control is added to a TableLayoutPanel in Windows Forms. I am handling ParentChanged event of the control to find out if the control is added to a parent(here TableLayoutPanel), but the index I receive is -1.
TableLayoutPanel t;
private void button1_Click(object sender, EventArgs e)
{
// this.Text = tableLayoutPanel1.Height.ToString();
t = new TableLayoutPanel();
t.Dock = DockStyle.Fill;
//t.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink;
t.AutoSize = true;
//t.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink;
t.RowStyles.Add(new RowStyle(SizeType.AutoSize));
t.RowStyles.Add(new RowStyle(SizeType.AutoSize));
t.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 50));
t.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 50));
panel1.Controls.Add(t);
t.CellBorderStyle = TableLayoutPanelCellBorderStyle.Single;
Label lbl = new Label();
lbl.ParentChanged += new EventHandler(lbl_ParentChanged);
lbl.Margin = new System.Windows.Forms.Padding(20, 150, 20, 20);
lbl.Text = "Hello";
t.Controls.Add(lbl, 0, 0);
}
void lbl_ParentChanged(object sender, EventArgs e)
{
Label lbl = (Label)sender;
int row = t.GetRow(lbl);//here I get row = -1 ??????
}
I need row number to which the control is added. The control should take action independent of when it is added to the TableLayoutPanel. How to get it ?
void t_ControlAdded(object sender, ControlEventArgs e)
{
int row = t.GetRow(e.Control); //this also gives row = -1
}
You need to increment RowCount/ColumnCount
, if you add new RowStyles/ColumnStyles
to your TableLayoutPanel
. After this you can easily use the GetPositionFromControl(Control value)
Method.
I think, ControlAdded
Event is the better approach in this case. Give it a try.
Do it like this:
public partial class Form1 : Form
{
private TableLayoutPanel panel;
public Form1()
{
InitializeComponent();
InitializeTableLayoutPanel();
}
private void Form1_Load(object sender, EventArgs e)
{
AddControl(0, 0);
AddControl(0, 1);
AddControl(1, 0);
AddControl(1, 1);
AddControl(2, 0);
AddControl(2, 1);
AddControl(3, 0);
AddControl(3, 1);
}
private void InitializeTableLayoutPanel()
{
panel = new TableLayoutPanel();
panel.Dock = DockStyle.Fill;
panel.AutoSize = true;
panel.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 50));
panel.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 50));
panel.ColumnCount = 2;
panel.RowStyles.Add(new RowStyle(SizeType.AutoSize));
panel.RowStyles.Add(new RowStyle(SizeType.AutoSize));
panel.RowCount = 2;
panel.CellBorderStyle = TableLayoutPanelCellBorderStyle.Single;
panel.ControlAdded += new ControlEventHandler(OnControlAdded);
this.Controls.Add(panel);
}
private void OnControlAdded(object sender, ControlEventArgs e)
{
if (e.Control != null)
{
int column = panel.GetPositionFromControl(e.Control).Column;
int row = panel.GetPositionFromControl(e.Control).Row;
MessageBox.Show(string.Format("Column: {0}, Row: {1}", column, row));
}
}
/// <summary>
/// Add Control to Panel
/// </summary>
/// <param name="column">column position</param>
/// <param name="row">row position</param>
private void AddControl(int column, int row)
{
Label label = new Label();
label.Font = new Font(new FontFamily("Droid Sans"), 20, FontStyle.Bold);
label.Name = "label";
label.Text = "Whoop!";
if (column < panel.ColumnCount && row < panel.RowCount)
panel.Controls.Add(label, column, row);
else
throw new ArgumentOutOfRangeException();
}
}
这篇关于查找行控制指标加入到TableLayoutPanel中的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!