在组合中选择一个项目会导致循环调用
本文关键字:项目 调用 循环 一个 组合 选择 | 更新日期: 2023-09-27 18:26:47
我正在编写一个winform应用程序。在表格上,我有一个标签和一个组合框。组合框中填充有字体名称。从中选择字体时,标签的字体文本会相应地发生变化。单击标签时,组合框的selecteditem会相应设置。问题是,当我选择标签时,我会得到一个循环调用:我根据标签的字体设置组合框项目,然后启动SelectedIndexChanged,它负责设置标签的字体名称(ChangeLabelFont)。因此,当标签字体是所有这些调用的触发器时,它会再次更新。
private void FontToolStripComboBox_SelectedIndexChanged(object sender, EventArgs e)
{
if (_selectedLabel == null)
{
return;
}
ChangeLabelFont(FontNameToolStripComboBox.SelectedItem.ToString(), FontSizeToolStripComboBox.SelectedItem.ToString());
}
private void SelectLabel(Point location)
{
SetComboBoxesFont(_selectedLabel.Font.Name, _selectedLabel.Font.Size);
}
private void SetComboBoxesFont(string name, float size)
{
FontNameToolStripComboBox.SelectedItem = name;
FontSizeToolStripComboBox.SelectedItem = size;
}
private void ChangeLabelFont(string name, string size)
{
if (_selectedLabel == null)
{
return;
}
FontFamily fontFamily = new FontFamily(name);
float fontSize = float.Parse(size);
_selectedLabel.Font = new Font(fontFamily, fontSize);
}
有没有办法防止这种循环调用?也许我做错了什么?
您显示的代码中缺少一些内容。我想看看ChangeLabelFont
方法以及"选择标签"事件的处理程序。但我认为最终是SelectLabel
方法。那么,使用会员标志:怎么样
private bool m_bInhibitCycle = false;
private void SelectLabel(Point location)
{
if (m_bInhibitCycle) return;
m_bInhibitCycle = true;
SetComboBoxesFont(_selectedLabel.Font.Name, _selectedLabel.Font.Size);
m_bInhibitCycle = false;
}