我已经在 Windows 窗体中创建了一个表格布局,如图所示,我在我的表格中添加了一个鼠标右键单击菜单,我想在我右键单击 perticuler 单元格时为单元格着色,所以我该怎么做。
当我单击add device
单元格时应涂成绿色,单击delete device
时应显示默认颜色,单击fire
时应将单元格涂成红色,依此类推
下面是我的表格和表格布局
我已经在 Windows 窗体中创建了一个表格布局,如图所示,我在我的表格中添加了一个鼠标右键单击菜单,我想在我右键单击 perticuler 单元格时为单元格着色,所以我该怎么做。
当我单击add device
单元格时应涂成绿色,单击delete device
时应显示默认颜色,单击fire
时应将单元格涂成红色,依此类推
下面是我的表格和表格布局
嗨,我没有你要找的东西,但是,
TableLayoutPanel 本身并没有真正的“单元格”,实际上是作为控件的容器。这意味着您无法真正检索单个行、列或单元格。另一种方法是使用面板并在每个面板上放置单独的点击事件。
但是,如果您确定要使用 TableLayoutPanels,则可以使用 EventArgs 中 TableLayoutPanel 上发生鼠标单击的位置的 XY 坐标。并确定它是哪个块,因为你有均匀分布的行/列。
例如,如果您的所有单元格大小相同并且 TableLayoutPanel 停靠在表单中,这将获得选定的单元格。:
Point selectedCell = new Point();
private void tableLayoutPanel1_MouseClick(object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Right)
{
//show contextMenuStrip
selectedCell = new Point(e.X / (tableLayoutPanel1.Width / tableLayoutPanel1.ColumnCount), e.Y / (tableLayoutPanel1.Height / tableLayoutPanel1.RowCount));
}
}
我得到了我的问题的答案,可以如下所示首先我们需要找到发送事件的标签控件(发送者),如下所示
private void AssignClickEvent()
{
foreach (Control c in tableLayout.Controls.OfType<Label>())
{
c.MouseClick += tablelayout_MouseClick;
addDevice.Click += addDevice_Click;
deleteDevice.Click += deleteDevice_Click;
fire.Click += fire_Click;
fault.Click += fault_Click;
suppress.Click += suppress_Click;
}
}
有一个指针控制的全局变量
public Label h = new Label();
然后我们需要将发送者复制到控件
private void tablelayout_MouseClick(object sender, MouseEventArgs e)
{
Label l = (Label)sender;
if (e.Button == MouseButtons.Right)
{
h = l;
num = l.Text;
m.MenuItems.AddRange(new MenuItem[] { addDevice, deleteDevice, fire, fault,suppress });
tableLayout.ContextMenu = m;
m.Show((Control)(sender), e.Location);
}
}
然后使用全局控件“h”为控件设置颜色
public void addDevice_Click(object sender, EventArgs e)
{
try
{
h.BackColor = Color.Green; ;
comport.Write("AB");
comport.Write(num);
comport.Write(" ");
stausLable.Text = "Device "+num+" added";
comport.WriteLine("000000000000");
}
catch (InvalidOperationException )
{
stausLable.Text = "Open communication port";
}
}
有一种更简单的方法,无需实现这些事件以及额外的变量。假设上下文菜单名为“DeviceActionsContextMenu”并链接到标签控件(根据您的评论),实现工具条项目的点击事件 -
private void addDeviceToolStripMenuItem_Click(object sender, EventArgs e)
{
(contextMenuStrip1.SourceControl as Label).BackColor = Color.Green;
}
或实现上下文菜单的项目点击事件 -
private void DeviceActionsContextMenu_ItemClicked(object sender, ToolStripItemClickedEventArgs e)
{
if (e.ClickedItem == addDeviceToolStripMenuItem)
{
(contextMenuStrip1.SourceControl as Label).BackColor = Color.Green;
}
}