c# - 无法在与枚举绑定的组合框中设置“SelectedValue”
问题描述
我想通过 SelectedItem/SelectedText/SelectedValue(从任何一种方式)在组合框中设置默认值(而不是第一个)。
我试图通过许多不同的方式来解决它。就像我将枚举设置为键值对一样。试图使用“SelectedIndex”。调试时显示“-1”。在其他“selected*”选项中,值为“null”。我不知道发生了什么。我附上了代码。请看一下并帮助我解决它。谢谢你。
ComboBox cmbxType= new ComboBox();
cmbxType.FormattingEnabled = true;
cmbxType.DropDownStyle = ComboBoxStyle.DropDownList;
cmbxType.Margin = new Padding(3, 6, 3, 3);
cmbxType.Name = "cmbxType";
cmbxType.Size = new System.Drawing.Size(200, 28);
cmbxType.TabIndex = 1;
cmbxType.DataSource = Enum.GetValues(typeof(StateType));
cmbxType.SelectedIndexChanged += new System.EventHandler(cmbxType_SelectedIndexChanged);
cmbxType.ValueMember = (workflowRows).ToString();
cmbxType.SelectedValue = 2
PS:我在创建表单后创建了这个组合框,而有问题的情况仅与枚举有关。
解决方案
根据this Stack Overflow question,您只能在分配数据绑定后设置所选项目。OnLoad
如果您在事件发生时选择该项目,它应该可以工作。下面是一个工作示例。
using System;
using System.Windows.Forms;
namespace WindowsFormsApp
{
static class Program
{
internal enum StateType
{
State1,
State2,
State3
}
internal class DemoForm : Form
{
ComboBox cmbxType = new ComboBox();
public DemoForm()
{
cmbxType.DataSource = Enum.GetValues(typeof(StateType));
Controls.Add(cmbxType);
}
protected override void OnLoad(EventArgs e)
{
base.OnLoad(e);
cmbxType.SelectedItem = StateType.State3;
}
}
[STAThread]
static void Main()
{
Application.Run(new DemoForm());
}
}
}
推荐阅读
- kotlin - 致命异常:主要:okhttp3.RealCall.execute
- c++ - 为什么单行注释中的换页和垂直制表符的处理方式不同?
- javascript - 通过 jquery 获取和设置图片 URL
- android - FAB的颜色什么时候依赖colorAccent?
- swift - iOS Swift WebRTC - 无法设置远程报价 sdp:无法设置远程视频描述发送参数
- python-3.x - tktable模块安装问题。_tkinter.TclError:无效的命令名称“表”
- java - 从 Java 中的多模块项目生成数据流模板
- csv - 仅导入更新的列谷歌脚本
- electron - electron-builder,在windows中,如何配置可以退出安装过程?
- python - 使用 python 从 3d .stl 文件中查找 2D 横截面中的材料和空气