当我更改ListBox时,选择TextBox取消选择

时间:2016-05-21 18:29:24

标签: c# winforms windows-forms-designer

我自己也是项目经理,我需要经常刷新项目列表。当我刷新项目管理器时,我想选择之前选择的项目。但是这个选择会导致我的文本框取消选择,因此,在输入一个键后,该文本框会取消选择。

详细说明会发生什么:

  • 我尝试编辑一个文本框
  • 版本导致项目更新 - >程序调用RefreshProjectList()
  • 标记位置上的RefreshProjectList()会导致所选文本框取消选择
  • 结果:您必须在写入一个符号后选择文本框

Picture if useful

These selected text boxes are struggling to be edited

代码:

    private void RefreshProjectList() {
        if (BlockListReload)
            return;

        Project selected = (Project)ProjectList.SelectedItem;
        ProjectList.Items.Clear();
        CurrentlyShown.Clear();

        foreach(Project p in Projects){
            if (p.state == State.Planned && ShowPlanned.Checked) {
                CurrentlyShown.Add(p);
                ProjectList.Items.Add(p);
            }
            if (p.state == State.Active && ShowActive.Checked) {
                CurrentlyShown.Add(p);
                ProjectList.Items.Add(p);
            }
            if (p.state == State.Finished && ShowFinished.Checked) {
                CurrentlyShown.Add(p);
                ProjectList.Items.Add(p);
            }
            if (p.state == State.Delayed && ShowDelayed.Checked) {
                CurrentlyShown.Add(p);
                ProjectList.Items.Add(p);
            }
        }

        if (selected == null)
            return;

        if (ProjectList.Items.Contains(selected)) {
            ProjectList.SelectedItem = selected; // IF I REMOVE THIS
        } else {
            if (ProjectList.Items.Count > 0)
                ProjectList.SelectedIndex = 0; // OR THIS LINE, EVERYTHING WORKS
        }
    }

如果您需要更多代码,我很乐意提供,但我不想用大量无用的代码向您发送垃圾邮件。

问:为什么更改ListBox中的选定项会导致取消选择TextBox以及如何防止它?

2 个答案:

答案 0 :(得分:0)

具有可选文本或项目的多个控件还附带属性HideSelection

这包括:

  • TextBox
  • RichTextBox
  • ListView

但不是

  • ListBox
  • CheckedListBox
  • DataGridView

无论喜欢与否,它始终默认为true,因此只要焦点偏离控件,选择就会隐藏。

只需在设计器中将其设置为false,无论重点在哪里,您都可以看到所有选择。

答案 1 :(得分:0)

OMG。老实说,我不知道为什么我没有看到它。

ProjectList.SelectedItem = selected;
//where ProjectList is ListBox<Project> and selected is Project

我在ProjectList(ListBox)中选择一个项目。我没有意识到它正在调用一个ProjectList_SelectedIndexChanged()事件。

编辑:通过添加以下内容解决:

        if (focused != null) {
            this.ActiveControl = focused;
            focused.Select(focused.TextLength,0);
        }

焦点是一个TextBox,我设置为最后选择的TextBox,这是表格 谢谢你。