【问题标题】:how to automatically set value of textbox according to value of another textbox如何根据另一个文本框的值自动设置文本框的值
【发布时间】:2016-03-26 07:29:22
【问题描述】:

我有textbox1textbox2textbox3 我想根据textbox1 的值自动设置textbox2textbox3 的值,它具有如下自动完成方法...

在 textbox1 完成自动完成后,我应该如何在 while 子句中自动设置 textbox2textbox3 的值?

两天后我正在处理这些错误表单,我的代码中的所有内容都是公开的...我想我想知道新类应该在 namespace { Class class_name} 这样的命名空间范围内定义,但我正在定义类而不是像name spaces {class Class_name1 {classs Class_name2 } } 这样的另一个类,但我的问题是,当我将我的类放在名称空间范围内时,我遇到了很多错误,并且它无法识别很多关键词......所以请问这是问题吗?如果是的话,请你带领我解决这个问题???

公共类 PopulateProduct { 公共字符串 ProductDesc { 获取;放; } 公共小数单价{得到;放; } }

    Dictionary<string, PopulateProduct> dict = new Dictionary<string, PopulateProduct>();

    public void load()
    {
        string connstr = "user id=rawpic;password=admin";
        string cmdtxt = @"select PRODUCT_ID,DESCRIPTION,UNIT_PRICE 
                              from products";

        AutoCompleteStringCollection autocom = new AutoCompleteStringCollection();
        TB_PRODUCT_ID.AutoCompleteMode = AutoCompleteMode.Suggest;
        TB_PRODUCT_ID.AutoCompleteSource = AutoCompleteSource.CustomSource;
        TB_PRODUCT_ID.AutoCompleteCustomSource = autocom;

        using (OracleConnection conn = new OracleConnection(connstr))
        using (OracleCommand cmd = new OracleCommand(cmdtxt, conn))
        {
            try
            {
                conn.Open();
                OracleDataReader dr = cmd.ExecuteReader();

                while (dr.Read())
                {
                    dict.Add((string)dr["PRODUCT_ID"],
                        new PopulateProduct()
                        {
                            ProductDesc = (string)dr["DESCRIPTION"],
                            UnitPrice = (decimal)dr["UNIT_PRICE"]
                        });
                    autocom.Add(dr["PRODUCT_ID"].ToString());
                }

            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message,"",MessageBoxButtons.OK,MessageBoxIcon.Error);
            }
        }
    }


    private void TB_PRODUCT_ID_TextChanged(object sender, EventArgs e)
    {
        if (dict.ContainsKey(TB_PRODUCT_ID.Text)) 
        {
            TB_PRODUCTS_DESC.Text = dict[TB_PRODUCT_ID.Text].ProductDesc;
            TB_UNIT_PRICE.Text = dict[TB_PRODUCT_ID.Text].UnitPrice.ToString();
        }
    }

【问题讨论】:

  • 这是WinFormTextBox吗?
  • 如果全部在 UI 线程上,那么只需设置属性 Textbox.Text,否则在单独的线程上,您仍然需要访问 UI 线程,否则会抛出异常,因为 UI 对象无法由其他线程修改
  • @Ian 是的,它是窗体
  • @Mrinal Kamboj 实际上我有权限问题我不知道为什么错误消息说.. 'RAWPIC.RP0102.Object.ProductDesc' 由于其保护级别'RAWPIC.RP0102.Object'而无法访问.UnitPrice' 由于其保护级别而无法访问 'System.Collections.Generic.Dictionary.Add(string, RAWPIC.RP0102.Object)' 的最佳重载方法匹配有一些无效参数1:无法从“对象”转换为“字符串”与您所说的线程有关吗???如果是,那你能帮我吗?
  • @Mrinal Kamboj 如果有帮助,我已经发布了完整的代码

标签: c# winforms textbox


【解决方案1】:

“...我的代码中的所有内容都是公开的...”

请再次检查。您的Object 模型的属性尚未公开(并且Object 对您的模型来说不是一个好名字......Product 怎么样?):

public class Product
{
    public string ProductDesc { get; set; }
    public decimal UnitPrice { get; set; }
}

关于错误信息的最后一部分,那是因为DataReader["column_name"] 返回了对象。您需要将结果显式转换为合适的类型:

dict.Add((string)dr["PRODUCT_ID"], 
         new Product() 
         { 
            ProductDesc = (string)dr["DESCRIPTION"], 
            UnitPrice = (decimal)dr["UNIT_PRICE"]
         });

【讨论】:

  • 非常感谢您的帮助,请您看看在文本更改事件中使用它是否正确?
  • @ har07 我解决了这个问题,但现在什么也没有发生,没有任何建议出现,也没有发生任何事情我试图删除(4 确定这是错误的)if 部分,但它的 trow 异常显示 The given key is not present在字典里。 ...我已经用所有的变化更新了我的原始帖子..我正在处理表格二,我想知道它的新方式
猜你喜欢
  • 2013-09-03
  • 2021-12-04
  • 1970-01-01
  • 1970-01-01
  • 2017-07-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-07-24
相关资源
最近更新 更多