VB.NET / Visual Studio 2010,在运行时递增控件名称

时间:2012-04-25 18:03:21

标签: vb.net controls

我正在编写发票应用程序。用户应该能够通过从ComboBox中选择产品来向发票的记帐部分添加新行,该产品随后会根据所选产品填写各种其他字段(价格,描述等)。

我的问题是:当用户添加产品时,我希望程序自动为下一个产品生成一个新行。似乎实现这一目标的唯一方法是创建一组具有递增名称的新控件,即第一个产品的Product1,Price1,Desc1,第二个产品的Product2,Price2,Desc2等。这是可能的,或者我是不是错了?

1 个答案:

答案 0 :(得分:1)

我必须在某个时刻做这样的事情,我做的是创建一个客户用户控件,在你的情况下,它将包含一个组合框,在加载时填充产品,以及所有相关的控件,将在组合框的selectedindexchanged事件中填写。在要显示此信息的主窗体上放置一个面板,并将自定义用户控件添加到panels.controls集合中。

由于所有功能基本上都包含在用户控件本身中,因此您不应该遇到命名问题。

对于在用户进行选择时添加用户控件,您可以调暗控件withevents并将自定义事件附加到用户控件并在主窗体中处理它。由于控件将在运行时添加,因此您需要使用AddHandler调用附加事件处理程序。

所以为了打破它,你需要:

  1. 自定义用户控件,其中包含每个产品所需的所有控件以及后面代码中的ID
  2. 自定义用户控件上的一个事件,用于告知主窗体组合框具有选定值
  3. 主窗体上用于保存自定义用户控件的面板
  4. 在组合框中进行选择时,向面板添加新客户用户控件的事件处理程序。
  5. 如果您想使用相同的按钮与某个产品进行交互,您可以在用户控件后面的代码中附加一个ID,并在每次添加新的用户控件时设置该ID。这并不难,我认为我听起来很棒,你可以在面板控件集合上运行linq并获得所有面板,你所指定的任何条件都可以满足,然后从那里做你想做的事。

    关于你的第二个问题,我认为你的用户控制是从某个地方拉出一个虚假的连接字符串。我会尝试追踪那里发生的事情并从那里开始。除此之外的任何东西都只是一个WAG而且对你没有任何帮助。