在组合中选择一个项目会导致循环调用

本文关键字:项目 调用 循环 一个 组合 选择 | 更新日期: 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;
}