C#组合Xbox禁用项目替代方案?

C#组合Xbox禁用项目替代方案?,c#,winforms,combobox,C#,Winforms,Combobox,我正试图为我在一所学校的印刷中心编写一个信息亭程序,让学生选择大小和媒体类型,然后让它生成一个价格。我目前正在用单选按钮来做这件事,它工作得很好,但我们正在添加更多的选项,一个下拉列表框会更合适。另外,我计算价格的代码也失控了。我想将其设置为便于计算价格。设置如下所示: public static int get_index(string index) { if (index == "Matte") return (1);

我正试图为我在一所学校的印刷中心编写一个信息亭程序,让学生选择大小和媒体类型,然后让它生成一个价格。我目前正在用单选按钮来做这件事,它工作得很好,但我们正在添加更多的选项,一个下拉列表框会更合适。另外,我计算价格的代码也失控了。我想将其设置为便于计算价格。设置如下所示:

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
                .....
            }
文件1-纸张大小(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_1.Disable等。此外,为了计算价格,我有数百行代码执行以下操作:

 If(8.5x11_1.Checked)
    {
        If(matte_1.Checked) 
            price = 8.5x11matte_1; 
        if(luster_1.Checked) 
            price = 8.5x11luster_1;
        ...etc.
    }  
转鼓需要更多数据(高度)在我们按线性英寸收费的情况下进行处理。目前,对于每个文件,我只有一个他们需要填写的高度框。我可以在我的新版本的每个文件旁边放置一个高度字段。然后,如果他们选择一卷,高度框胸围将被填写,这需要更多的“如果”…我目前有数百个。有没有有没有更优雅的方法

我只是没有编程背景来简化这一点,但我知道这可能需要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
                .....
            }
在我的主程序中,我对价格的定义如下:

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
                .....
            }

您不应该使用一个三维数组。您将需要3个表来完成此操作。请将所有类型存储在数据库中。
三个表格是:
1.纸张
2.媒体
3.纸媒

所以,您可以使用纸张大小填充第一个下拉列表。 然后,当在papersize中选择项目时,您可以运行一个查询来填充下拉媒体(通过交叉表加入)。这样,您将只显示仅适用于此papersize的媒体。或者,您也可以使用另一种方法。
这回答了你的问题吗?

有几种方法。 您可以创建一个包含详细信息的类文件来存储

[class File / class paper size / class Mediatype ]
在应用程序开始时初始化列表

List<FileWithDetail> LstFileWithDetail = new FileWithDetail(){...}

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


请参阅示例:

对于这两个条目,数据库可能会过大。我不熟悉数据库的内容,但我会研究一下,如果它有效,我会回复。谢谢。我找到了一些表格示例,并创建了如下表格:table.Columns.Add(“Media Index”,typeof(int));table.Columns.Add(“Media String”,typeof(String));table.Rows.Add(0,“无光”);table.Rows.Add(1,“光泽”);table.Rows.Add(2,“光泽”);然后我像这样填充组合框2.DataSource=table;comboBox2.DisplayMember=“媒体字符串”;我不确定如何在“size”表上运行查询以填充“媒体”表。不仅如此,还有我如何引用索引来加载我的数组?它是Windows.Forms应用程序吗?出于好奇,您能否给出一个在您的情况下的媒体类型示例?这可能会让我们更清楚地了解您的使用情况。是