【问题标题】:can't able to add value to textbox无法向文本框添加值
【发布时间】:2017-07-17 11:47:30
【问题描述】:

我有一个 datacontrol.cs(UserControl),它包含 textbox1 和 codebehind 窗口,其中包含一个带有 currentvalue 参数的方法

public void bindvalue(float currentvalue)
{
    textbox1.Clear();
    textbox1.Text = currentvalue.ToString();
}

我有一个表单,这里在这个表单中添加了用户控件,其中包含一个按钮

因此,当单击按钮时,它会通过方法将当前值传递给数据控件类。

private void button_click(object sender, EventArgs e)
{

    float currentvalue = 1500.00f;
    datacontrol  obj = new datacontrol();

    obj.bindvalue(currentvalue);
}

对我来说一切正常。它将当前值传递给用户控件类,并将当前值分配/添加到textbox1.Text = currentvalue.ToString();。它没有显示任何错误。但最后文本框没有显示任何值。

我使用断点来检查功能。它为文本框提供了当前值。但是很奇怪!!!... 我无法预测我的代码有什么问题。 帮助表示赞赏。:)

【问题讨论】:

  • 什么是datacontrol?
  • 据我所知,除了声明之外,您不会对 obj 做任何事情,也不会将其挂在表单控件或任何东西中
  • 它是一个用户控制 GUI @BarryO'Kane
  • 将datacontrol 的实例添加到表单中。
  • 您必须使用数据控件中的实例而不是新对象。

标签: c# winforms textbox user-controls


【解决方案1】:

您的表单上不存在具有所需值 (1500.00f) 的 datacontrol 实例。你只是在 decaring 它,传递价值并忘记它。

如果你已经在表单中添加了用户控件,并且想调用现有控件的bindvalue方法,你应该做如下:

private void button_click(object sender, EventArgs e)
{
    float currentvalue = 1500.00f;
    this.dataControl1.bindvalue(currentvalue);
}

注意dataControl1是表单上用户控件的名称,它可以不同于dataControl1。

如果你想创建新的用户控件并调用bindvalue,你应该在表单上添加新的实例:

private void button_click(object sender, EventArgs e)
{
    float currentvalue = 1500.00f;
    datacontrol  obj = new datacontrol();

    obj.bindvalue(currentvalue);
    this.Controls.Add(obj);
}

如果它已经是在窗体上动态添加的控件,则声明一个 Form 类的字段,并在需要时为其分配控件的新实例,然后像第一个示例中所示那样调用它。

【讨论】:

  • 它再次添加控件
  • @User6667769 好吧,如果控件已经存在,检查第一个示例代码。
  • 那么不需要创建任何实例..?
  • @User6667769 实例已经创建,当您声明它时。
  • @User6667769 查看 YourFormName.Designer.cs 文件。在自动生成的代码部分会有一行:this.datacontrol1 = new datacontrol();。并且还会有一行:this.Controls.Add(this.datacontrol1 ); 此代码是在您将控件拖放到设计器中的表单时生成的时间点
【解决方案2】:

您需要在表单中添加datacontrol 的实例

datacontrol  obj = new datacontrol();
obj.bindvalue(currentvalue);
Controls.Add(obj);

【讨论】:

    【解决方案3】:

    您可以通过在按钮单击事件处理程序中使用用户控件的标记名来简单地调用 bindvalue 方法。 假设标签名称是“datacontrol”,那么您应该使用以下代码行来完成您的任务:

     protected void Button1_Click(object sender, EventArgs e)
    {
        float myvalue = 150.50f;
        datacontrol1.BindValue(myvalue);
    
    }
    

    问候,Aamir(.Net 开发人员)

    如果它解决了正在寻找的问题,请将此主题标记为答案...谢谢

    【讨论】:

    • "假设标签名是'datacontrol',那么"你的代码是错误的。 Althgou 这只是一个小细节,例如缺少 1,但它会使您的代码无法编译。
    • 梦珠,我的代码怎么错了?我已经运行了这段代码,输出没问题。这只是一小段代码。
    • 请阅读您所写的内容。 “使用标记名调用 bindvalue 方法……假设标记名是datacontrol”,你打错了!因为在你的代码中你写的是:datacontrol1.BindValue(myvalue);。这确实是一个小错误,但非常重要,因为如果控件名称真的是datacontrol,那么您的代码将无法编译!
    • Mong Zhu,我的意思是使用以下行创建的标记名:
    • 你在哪里使用这条线?你没有在你的帖子里写这个。
    猜你喜欢
    • 2011-10-03
    • 2014-07-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-12
    • 1970-01-01
    • 2021-06-25
    相关资源
    最近更新 更多