1

希望这将是我一段时间内的最后一个问题,我从你们那里获得的东西将帮助我真正开始这个项目!所以......我目前有variosu组合框和文本框被放入FORM2上的字符串列表中,所有空白都被忽略然后输出到FORM3上的列表框中。这是我的最后一块.. 组合框 1 将填充说“Premium”,然后文本框 1 将有 4 个值“400,500,600,700”,然后组合框 2 带有“封面”和文本框 2“TPO,TPFT,COMP”

我希望它看起来如下任何----只是为了间隔,因为它似乎忽略了空格键

列表框1 --- | --- ListBox2
Premium ------------ 400
-------------500
------ -------------------600
-------------700
盖板--- --------------TPO
-------------TPFT

等等等等
我得到的是

列表框1 --- | --- ListBox2
Premium ------------ 400
封面---------------------500
------------- ------------600
-------------700
------------ --------------TPO
-------------TPFT

字段之间没有关系,我不知道如何最好地描述或查找如何做到这一点,使其输出组合框一个,然后 textbox1 分成几行进入第二个框。然后在这些下一个组合框等下,所以我猜组合框+((文本框1行-1值)作为空白行)如果我可以把图片放上去,这会容易得多!该死的你的声誉!!!!

终于可以有图了!!!!!! 在此处输入图像描述 正如您所希望看到的那样,表格 1 目前是无关紧要的(对表格 2/3 的 GUI 没有影响),但是您在表格 2 中选择了各种字段,它们被映射到 form3 ATM 中的一些数据被映射到一个奇怪的顺序。并且列表 1 和 2 之间没有格式

在下面找到 Form2 和 Form3 的早期概念Form2 和 Form3 早期概念

这就是我想要做的,数据以可读的格式排列(并且在幕后运行了各种 DROOLS,这些 DROOLS 将变形数据并打印结果)。

4

2 回答 2

1

问题是您对工作使用了错误的控制。您需要一个可以为列表中的每个项目显示多列数据的控件。该ListBox控件不适合这种情况,因为它是为仅显示单个列而设计的。

假设这是一个 WinForm 项目,而不是 WPF,我建议使用DataGridView控件或ListView控件。这些控件中的任何一个都可以显示多个列,但是,该ListView控件仅显示多个列,其View属性设置为Details。由于我自己偏爱ListView控制,我会给你一个使用那个的例子:)

首先,ListView在表单中添加一个控件。然后,View在设计器中将控件的属性设置为Details. 然后单击按钮以编辑Columns控件的属性。添加两列。然后,使用这样的代码来填充列表:

Dim item As ListViewItem = ListView1.Items.Add("Premium")
item.SubItems.Add("400")
item = ListView1.Items.Add("")
item.SubItems.Add("500")
item = ListView1.Items.Add("")
item.SubItems.Add("600")
item = ListView1.Items.Add("")
item.SubItems.Add("700")
item = ListView1.Items.Add("Cover")
item.SubItems.Add("TPO")
item = ListView1.Items.Add("")
item.SubItems.Add("TPFT")

如果看起来是这样,第一列的文本存储在组合框中,那么第二列的文本存储在逗号分隔的文本框中,那么您可以执行以下操作:

For Each cbo As ComboBox In MyComboBoxes
    Dim first As Boolean = True
    For Each value As String In GetTextBoxForComboBox(cbo).Text.Split(",")
        Dim item As ListViewItem = Nothing
        If first Then
            item = ListView1.Items.Add(cbo.Text)
        Else
            item = ListView1.Items.Add("")
        End If
        item.SubItems.Add(value)
        first = False
    Next
Next

当然,与其拥有类似的方法GetTextBoxForComboBox,不如拥有一个存储控件配对的类,如下所示:

Private Class ControlPair
    Public Property Cbo As ComboBox
    Public Property Txt As TextBox
End Class

然后,您可以像这样遍历它们:

For Each pair As ControlPair In MyPairs
    ' ...
    For Each value As String In pair.Txt.Text.Split(",")
        ' ...
        ListView1.Items.Add(pair.Cbo.Text)
        ' ...
    Next
Next

For Each是一种方便的语法,用于遍历IEnumerable对象中的所有项(基本上是任何列表,例如 anArray或 a List(Of T))。因此,在这种情况下,MyPairs需要是一个ControlPair对象列表,例如:

Dim MyPairs As New List(Of ControlPair)()
Dim pair1 As New ControlPair()
pair1.Cbo = ComboBox1
pair1.Txt = TextBox1
MyPairs.Add(pair1)
Dim pair2 As New ControlPair()
pair2.Cbo = ComboBox2
pair2.Txt = TextBox2
MyPairs.Add(pair2)

或者,如果您不想创建自己的课程,则可以使用Tuple(Of ComboBox, TextBox).

实际上,在看到您的屏幕截图后,看起来TreeView控件实际上可能更合适。您可以将每个组合框值显示为根级节点,然后在每个根级节点内将是文本框中每个分隔值的子节点,如下所示:

  • 优质的
    • 400
    • 500
    • 600
    • 700
  • 覆盖
    • TPO
    • TPFT
于 2013-04-10T12:52:03.240 回答
0

永远不要依赖空格或空行来格式化。编写适当的标记。

<form>
<label>Premium</label>
<select name="premium">
    <option>400</option>
    <option>500</option>
    <option>600</option>
    <option>700</option>
</select><br><br>
<label>Cover</label>
<select name="cover">
    <option>TPO</option>
    <option>TPFT</option>
    <option>COMP</option>
</select>
</form>
于 2013-04-10T08:17:40.890 回答