首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从组合框中的选定项填充文本框

从组合框中的选定项填充文本框
EN

Stack Overflow用户
提问于 2013-12-31 16:28:56
回答 1查看 282关注 0票数 0

我已经为现有的实用程序添加了一个新的接口,它将读取存储在外部设备上的数据。这需要获取XML响应并将它们反序列化为列表。下面是xml和列表创建的代码(要复制所有元素、属性、类型声明在这里太长了):

XML:

代码语言:javascript
复制
<?xml version="1.0" encoding="UTF-8"?>
<Device>
<Response>
    <command>Get</command>
    <argument>AllMethod</argument>
</Response>
<AllMethod>
<Method>
    <nMethodNumber>1</nMethodNumber>
    <sMethodName>Method-8</sMethodName>
    <fFlowRate>3.00</fFlowRate>
    <nTubeTemp>250</nTubeTemp>
    <nTestTime>150</nTestTime>
</Method>
<Method>
    <nMethodNumber>2</nMethodNumber>
    <sMethodName>Method-8</sMethodName>
    <fFlowRate>3.00</fFlowRate>
    <nTubeTemp>250</nTubeTemp>
    <nTestTime>150</nTestTime>
</Method>
<Method>
    <nMethodNumber>3</nMethodNumber>
    <sMethodName>Method-8</sMethodName>
    <fFlowRate>3.00</fFlowRate>
    <nTubeTemp>250</nTubeTemp>
    <nTestTime>150</nTestTime>
</Method>
<Method>
    <nMethodNumber>4</nMethodNumber>
    <sMethodName>Method-8</sMethodName>
    <fFlowRate>3.00</fFlowRate>
    <nTubeTemp>250</nTubeTemp>
    <nTestTime>150</nTestTime>
</Method>
<Method>
    <nMethodNumber>5</nMethodNumber>
    <sMethodName>Method-8</sMethodName>
    <fFlowRate>3.00</fFlowRate>
    <nTubeTemp>250</nTubeTemp>
    <nTestTime>150</nTestTime>
</Method>
<Method>
    <nMethodNumber>6</nMethodNumber>
    <sMethodName>Method-8</sMethodName>
    <fFlowRate>3.00</fFlowRate>
    <nTubeTemp>250</nTubeTemp>
    <nTestTime>150</nTestTime>
</Method>
<Method>
    <nMethodNumber>7</nMethodNumber>
    <sMethodName>Method-8</sMethodName>
    <fFlowRate>3.00</fFlowRate>
    <nTubeTemp>250</nTubeTemp>
    <nTestTime>150</nTestTime>
</Method>
<Method>
    <nMethodNumber>8</nMethodNumber>
    <sMethodName>Method-8</sMethodName>
    <fFlowRate>3.00</fFlowRate>
    <nTubeTemp>250</nTubeTemp>
    <nTestTime>150</nTestTime>
</Method>   
</AllMethod>
</Device>

创建列表:

代码语言:javascript
复制
public class AllMethod
{
[XmlElement("Method")]
//Puts Methods into list for deserialization.
public List<Method> methodlist = new List<Method>();
}

我在本地创建了XML文档,以便在运行前测试程序的功能。因此,在“读取方法”按钮事件中,我有以下代码:

代码语言:javascript
复制
private void btnReadMethod_Click(object sender, System.EventArgs e)
{
        string stringRequestXML = string.Empty;
        string stringResponseXML = string.Empty;

{
        //Will deserialize xml response and populate combo box with method numbers.
        //try
        //{
        XmlSerializer deserializer = new   XmlSerializer(typeof(ReadMethodResponse));
        StreamReader reader = new StreamReader(@"C:\XML\GetAllXml.xml");
        object obj = deserializer.Deserialize(reader);
        ReadMethodResponse XmlData = (ReadMethodResponse)obj;
        reader.Close();


        //}
        //catch (Exception ex)
        //{
        // throw ex;
        //}

        cmbMethodNumber.Items.Clear();
        foreach (Method details in XmlData.allMethods.methodlist)
        {
        cmbMethodNumber.Items.Add(details.MethodNumber);
        }



        }

        }

    private void cmbMethodNumber_SelectedIndexChanged(object sender, EventArgs e)
    {
        int MethodDetailsIndex = cmbMethodNumber.SelectedIndex;
        Method selectedMethod = xmlData.allMethods.methodlist[MethodDetailsIndex];
        txtMethodName.Text = selectedMethod.MethodName.ToString();
        txtFlow.Text = selectedMethod.FlowRate.ToString();
        txtTubeTemp.Text = selectedMethod.TubeTemp.ToString();
        txtTestTime.Text = selectedMethod.TestTime.ToString();
    }


}

我有一个用于显示方法号的组合框,还有三个用于显示方法名称、流量、测试时间和温度的文本框。我试图根据组合框的选定值(方法号)填充文本框中的正确信息。我用于反序列化xml的代码运行良好,但我在用相应的数据填充文本框时遇到了困难。我无法从cmbMethodNumber_SelectedIndexChanged访问列表。这可能是相当简单,但我是相当新的c#和谷歌不是我的朋友今天,有什么建议吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-12-31 17:54:15

没有太多有意义的信息可供处理,但问题似乎只是变量的范围界定。从本质上说,你这样做:

代码语言:javascript
复制
private void btnReadMethod_Click(object sender, System.EventArgs e)
{
    var xmlData = SomeFunctionToGetData();
}

private void cmbMethodNumber_SelectedIndexChanged(object sender, EventArgs e)
{
    var someValue = xmlData.SomeValue;
}

当然,第二个函数中不存在xmlData,因此不能引用它。它是在第一个函数的作用域中声明的,一旦该函数结束,它就从作用域中移除。这与您的XML或您想要解决的整个业务问题没有任何关系,它只是一个可变范围错误。

为了让多个处理程序访问这个数据(也就是说,为了使数据的范围能够跨越表单上的多个事件),它需要是一个类级别的对象。更像是这样的:

代码语言:javascript
复制
private TheTypeOfTheObject xmlData;

private void btnReadMethod_Click(object sender, System.EventArgs e)
{
    xmlData = SomeFunctionToGetData();
}

private void cmbMethodNumber_SelectedIndexChanged(object sender, EventArgs e)
{
    var someValue = xmlData.SomeValue;
}

我将变量添加到类级作用域,并删除了第一个函数中的声明。现在,第一个函数设置类级值,第二个函数读取类级值.当然,这做了一些假设:

  • 除非第一个函数在第一个函数之前成功运行,否则第二个函数永远不会运行。
  • 其他处理程序也不会修改该值。

如果存在这些假设不正确的情况,您可能希望添加一些错误检查和异常处理。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20860312

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档