将项目添加到表单内的列表视图

问题描述 投票:0回答:2

当我启动表单而不发送信息时,它会正确打开带有列标题的列表视图。

但是,当我尝试打开相同的表单来更新信息时,列表视图丢失了标题。不存在的 fcam 和列表视图顶部的所有其余编程

正常打开不发送数据

代码:

public FrmMicroConfig() { InitializeComponent(); }

打开并发送数据

`public FrmMicroConfig(字符串设备): this() {

        Dispostivo dispositivo = Dispostivo.JsonDesserializar(device);

        txtDevicename.Text = dispositivo.Nome;
        txtDeviceIp.Text = dispositivo.IP;
        txtDeviceLocal.Text = dispositivo.Local;

        LstdeviceVariables.Columns.Add("Nome");
        LstdeviceVariables.Columns.Add("Id");
        LstdeviceVariables.Columns.Add("StartBit");
        LstdeviceVariables.Columns.Add("Lenght");
        LstdeviceVariables.Columns.Add("Factor");
        LstdeviceVariables.Columns.Add("Offset");

        foreach (var Variable in dispositivo.Variables)
        {
            ListViewItem lvi = new ListViewItem(Variable.Nome);
            lvi.SubItems.Add(Variable.Id.ToString());
            lvi.SubItems.Add(Variable.Startbit.ToString());
            lvi.SubItems.Add(Variable.Lenght.ToString());
            lvi.SubItems.Add(Variable.Factor.ToString());
            lvi.SubItems.Add(Variable.Offset.ToString());
            LstdeviceVariables.Items.Add(lvi);
        }

        InitializeComponent();

    }`

结果就是这两个屏幕

常开:

在此输入图片描述

打开错误:

在此输入图片描述

我无法确定错误来自哪里 我已经尝试稍后添加标题但什么也没有 即使没有向列表视图添加项目,结果也是相同的 列表视图无法正常工作

知道这个错误是如何产生的吗?也许是一些错误的类配置或对象类型?

c# windows-forms-designer
2个回答
0
投票

在表单构造函数中,InitializeComponent() 应该是第一个或第一个项目之一。 这将确保所有控件均按照您的设计师进行设置。

如果您稍后根据当前代码调用InitializeComponent(),那么它将覆盖您之前设置的任何内容。

public FrmMicroConfig(string device) : this() {

    //Call    InitializeComponent first.
    InitializeComponent();
    Dispostivo dispositivo = Dispostivo.JsonDesserializar(device);

    //Now the rest of your code.
    txtDevicename.Text = dispositivo.Nome;
    txtDeviceIp.Text = dispositivo.IP;
    txtDeviceLocal.Text = dispositivo.Local;

    LstdeviceVariables.Columns.Add("Nome");
    LstdeviceVariables.Columns.Add("Id");
    LstdeviceVariables.Columns.Add("StartBit");
    LstdeviceVariables.Columns.Add("Lenght");
    LstdeviceVariables.Columns.Add("Factor");
    LstdeviceVariables.Columns.Add("Offset");

    foreach (var Variable in dispositivo.Variables)
    {
        ListViewItem lvi = new ListViewItem(Variable.Nome);
        lvi.SubItems.Add(Variable.Id.ToString());
        lvi.SubItems.Add(Variable.Startbit.ToString());
        lvi.SubItems.Add(Variable.Lenght.ToString());
        lvi.SubItems.Add(Variable.Factor.ToString());
        lvi.SubItems.Add(Variable.Offset.ToString());
        LstdeviceVariables.Items.Add(lvi);
    }
}

0
投票

InitializeComponent
方法是创建和配置所有控件的地方。如果在调用该方法之前将引用控件的代码放入构造函数中,则会抛出
NullReferenceException
并且构造函数的其余部分将不会执行。您需要在调用
InitializeComponent
之后添加任何附加代码。

© www.soinside.com 2019 - 2024. All rights reserved.