gpt4 book ai didi

C# 组合框禁用项目替代?

转载 作者:行者123 更新时间:2023-11-30 22:33:16 25 4
gpt4 key购买 nike

我正在尝试为我在学校的打印中心编写一个 kiosk 程序,供学生选择尺寸和介质类型,然后让它生成价格。我目前正在使用单选按钮执行此操作,该按钮工作正常,但我们正在添加更多选项,并且下拉列表框会更合适。另外,我计算价格的代码失控了。我想设置它以便计算价格应该很容易。设置是这样的:

File1 - 纸张尺寸(9 个选项) - 介质类型(18 个选项)
文件 2、文件 3 等

我打算将其存储在 3D 数组 filename[]papersize[]media[] 中以处理价格。

问题是并非所有媒体类型都适用于所有尺寸。我看到您无法禁用列表中的项目。如果你选择一种尺寸,我可以有选择地填充另一个下拉菜单,有或没有项目,但它会改变我的索引号。如果我可以禁用项目,我可以保持相同的索引并为处理价格制作一个简单的循环。就像现在一样,由于介质类型是不同的索引,因此我必须手动指定和循环每种纸张尺寸。

我希望这是有道理的,我并不是真正的程序员,我只是想通过一些简单的事情来改善我们在打印中心的工作流程和准确性。如果有帮助,我可以提供旧程序的屏幕截图和新程序的模型。谁能想到一个更优雅的解决方案?

谢谢!!

编辑

哎呀..好吧,这最终比我预期的要困难:感谢大家的投入,非常感谢。我真的没想到会有任何回应,而且有很多。谢谢你。我尝试了下面提到的表格想法,但我不确定如何实现它。我会针对我的尝试对该帖子发表评论。如果其他人有其他想法,让我提供更多细节。

例如我正在尝试做的事情:

尺寸 = 8.5x11 有介质 = 哑光、双面哑光、光泽、光泽、醋酸纤维、简历
尺寸 = 11x17 有媒体 = 相同减去醋酸盐和恢复
等等,最多 60 英寸的带背光媒体和各种东西的卷。

无论纸张如何,8.5x11 的价格都是 1.50,然后每张纸都有自己的价格
11x17 的价格为 3.00,每张纸都有自己的价格,比 8.5x11 的同行价格高

8.5x11 matte = .25
11x17 matte = .50

8.5x11 matte total = 1.75
11x17 matte total = 3.50

我试图以尽可能少的步骤来做到这一点。目前,我有一个单选按钮,它们占用了一堆屏幕空间,并执行以下操作:当 11x17_1.Checked acetate_1.Disable 等时。此外,为了计算价格,我有数百行代码执行以下操作:
 If(8.5x11_1.Checked)
{
If(matte_1.Checked)
price = 8.5x11matte_1;
if(luster_1.Checked)
price = 8.5x11luster_1;
...etc.
}

卷需要处理更多数据(高度),因为我们按线性英寸收费。目前,对于每个文件,我只有一个他们需要填写的高度框。我可以在新版本的每个文件旁边放置一个高度字段。然后,如果他们选择一个卷,高度框胸围被填写,这需要更多的 IF ......我目前有数百个。关于更优雅的方式来做到这一点的任何想法?

我只是没有编程背景来简化这一点,但我知道这可能可以使用数组和下拉列表在 10 行代码中完成:

自从我使用数组以来已经很长时间了,但我在想这样的事情:

选择[file_1][combobox_size.Index][combobox_media.Index]

我想我必须手动定义每个数组值,因为价格是任意的?
[0][0][0] = 1.75
[0][0][1] = 1.75
[0][0][2] = 2.00

等等。

我的 winform 会让我们说 12 行让他们输入文件名,然后选择下拉列表。如果 filename != null 那么我将处理文件和选择的价格。

因此,如果文件 1 是 11x17 光泽,我的数组将类似于:

[0][1][3] 例如,我会用 $4.00 的值预先定义它

如果它是一个卷,那么我只需乘以所需的高度框。

这个逻辑是合理的还是效率低下的?

编辑 #3

好吧,我想差不多了。遗憾的是,我无法弄清楚社区提供的其他解决方案,但我编写了一个“get_index”函数,如下所示:
public static int get_index(string index)
{

if (index == "Matte")
return (1);
....
if (index == "Luster")
return (3);
....
else
return (0);
}

在我的主程序中,我定义了这样的价格:
for (int x = 0; x < filenum; x++)
{
pricegrid[x, 0, 0] = 1.75; // 8.5x11 Resume
pricegrid[x, 0, 1] = 1.75; // 8.5x11 Matte
pricegrid[x, 0, 2] = 1.75; // 8.5x11 Double Sided Matte
pricegrid[x, 0, 3] = 2.35; // 8.5x11 Luster
.....
}

然后为了计算价格,我正在做这样的事情,调用 get_index 函数:
private void calculate_price()
{

getindex[0] = get_index(media1.SelectedItem.ToString());

....


}

最佳答案

您应该像这样动态地填充 ComboBox。
您可以使用不依赖于元素数量的 SelectedValue,而不是使用 SelectedIndex。

参见例如:Using ValueMember in ComboBox

关于C# 组合框禁用项目替代?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8392820/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com