Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/335.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 列表框在失去焦点后保留选择_C#_.net_Listbox - Fatal编程技术网

C# 列表框在失去焦点后保留选择

C# 列表框在失去焦点后保留选择,c#,.net,listbox,C#,.net,Listbox,我有一个列表框,当处于焦点时,当我选择一个项目时,它会返回一个有效的SelectedIndex。如果我有一个有效的SelectedIndex,并在同一论坛上单击一个文本框,SelectedIndex现在变成-1。但是,我希望它保持其SelectedIndex不变。如何执行此操作?处理事件并保存所选值,以便在控件重新获得焦点时还原它。处理事件并保存所选值,以便在控件重新获得焦点时还原它。我尚未在我的应用程序中验证这一点,但如果LB失去焦点您可能必须自己处理这种情况,方法是缓存最后选定的索引,并在控

我有一个列表框,当处于焦点时,当我选择一个项目时,它会返回一个有效的SelectedIndex。如果我有一个有效的SelectedIndex,并在同一论坛上单击一个文本框,SelectedIndex现在变成-1。但是,我希望它保持其SelectedIndex不变。如何执行此操作?

处理事件并保存所选值,以便在控件重新获得焦点时还原它。

处理事件并保存所选值,以便在控件重新获得焦点时还原它。

我尚未在我的应用程序中验证这一点,但如果LB失去焦点您可能必须自己处理这种情况,方法是缓存最后选定的索引,并在控件恢复焦点时重置它。您可以在包含表单中执行此操作,也可以在从ListBox派生的类中执行此操作

您甚至可以在看到选定索引变为-1时尝试设置它。不知道会发生什么,但我很想知道


编辑:刚刚测试过,和其他海报一样,我也无法复制。你的LB肯定有点不同,我还没有在我的应用程序中验证这一点,但如果LB失去焦点时SelectedIndex属性发生变化,你可能需要自己处理这种情况,缓存最后选择的索引,并在控件恢复焦点时重设它。您可以在包含表单中执行此操作,也可以在从ListBox派生的类中执行此操作

您甚至可以在看到选定索引变为-1时尝试设置它。不知道会发生什么,但我很想知道


编辑:刚刚测试过,和其他海报一样,我也无法复制。你的LB肯定有些许不同

列表框将保持它的SelectedIndex,而不考虑焦点

我在一个空白项目上测试了它,其中有一个ListBox、一个TextBox和一个用于显示ListBox的SelectedIndex的标签。在列表框的SelectedIndexChanged和文本框的TextChanged事件下,我用列表框的SelectedIndex更新了标签


必须有其他原因导致所选索引更改为-1。

列表框将保持其所选索引,而不考虑焦点

我在一个空白项目上测试了它,其中有一个ListBox、一个TextBox和一个用于显示ListBox的SelectedIndex的标签。在列表框的SelectedIndexChanged和文本框的TextChanged事件下,我用列表框的SelectedIndex更新了标签


必须有其他原因导致所选索引更改为-1。

这些控件是在不同的对话框中,还是在选项卡式容器上有不同的选项卡?这是我能想到的唯一一种方法,当你改变焦点时,你会失去你选择的索引。否则,任何人(例如,单击按钮)如何对项目采取行动?当焦点转到正在单击的按钮时,您将丢失选择…

这些控件是在不同的对话框中,还是在选项卡式容器上的不同选项卡中?这是我能想到的唯一一种方法,当你改变焦点时,你会失去你选择的索引。否则,任何人(例如,单击按钮)如何对项目采取行动?当焦点转到正在单击的按钮时,您将丢失选择…

我的问题与原始海报相同。 我无法完全理解,但当列表框绑定到一个可观察的集合,并且集合发生更改时,所选项目似乎失去了焦点


我将所选索引保存在一个变量中,并在所选索引为-1并且恢复它是有效的情况下重置它,从而绕过了这个问题。我遇到了与原始海报相同的问题。 我无法完全理解,但当列表框绑定到一个可观察的集合,并且集合发生更改时,所选项目似乎失去了焦点


我将所选索引保存在一个变量中,并在所选索引为-1并且恢复它是有效的情况下重置它,从而绕过了这个问题。这是一个老问题,但如果其他人遇到同样的问题,请检查您的ListBoxItem样式,尤其是如果您使用的是WPF主题中的样式之一

WPF主题的问题是包含 控件模板之外的部分:

<Style d:IsControlPart="True" TargetType="{x:Type ListBoxItem}">
....
<Style.Triggers>
        <Trigger Property="Selector.IsSelected" Value="True">
            <Setter Property="Foreground">
                <Setter.Value>
                    <SolidColorBrush po:Freeze="True" Color="{DynamicResource BlackColor}" />
                </Setter.Value>
            </Setter>
        </Trigger>
        <Trigger Property="IsKeyboardFocusWithin" Value="true">
            <Setter Property="IsSelected" Value="true" />
        </Trigger>
    </Style.Triggers>
</Style>

删除Style.Triggers,问题应该会消失这是一个老问题,但如果其他人遇到同样的问题,请检查ListBoxItem样式,特别是如果您使用的是WPF主题中的一种样式

WPF主题的问题是包含 控件模板之外的部分:

<Style d:IsControlPart="True" TargetType="{x:Type ListBoxItem}">
....
<Style.Triggers>
        <Trigger Property="Selector.IsSelected" Value="True">
            <Setter Property="Foreground">
                <Setter.Value>
                    <SolidColorBrush po:Freeze="True" Color="{DynamicResource BlackColor}" />
                </Setter.Value>
            </Setter>
        </Trigger>
        <Trigger Property="IsKeyboardFocusWithin" Value="true">
            <Setter Property="IsSelected" Value="true" />
        </Trigger>
    </Style.Triggers>
</Style>

删除Style.Triggers,问题应该会消失

TextBox has AutoPostBack=true也许设置了?也许,但标记表明这是一个C.NET,我的理解是,C.NET中没有可用于TextBox.TextBox has AutoPostBac的AutoPostBack属性
k=true可能设置?可能但标记表明这是一个C.NET,我的理解是C.NET中没有文本框的自动回写属性。这是ASP.NET还是WinForms?这是ASP.NET还是WinForms?我在使用WPF和MVVM模式时遇到了一个非常类似的问题,我有一个瀑布GUI,多个列表框相邻。一旦其中一个列表框失去了焦点,他们的选择也就失去了。移除你指出的样式触发器,为我修复它。非常感谢。我在使用WPF和MVVM模式时遇到了一个非常类似的问题,我有一个瀑布式GUI,多个列表框相邻。一旦其中一个列表框失去了焦点,他们的选择也就失去了。移除你指出的样式触发器,为我修复它。非常感谢。