4

我有一个表单 (form1),其中包含一个简单的下拉列表 (dropdown1) 和 2 个文本框 (textbox1) 和 (textbox2)。

场景是:用户在 textbox1 中输入一些代码,然后根据他输入的内容,代码的“类型”将出现在 textbox2 中。我应该说 textbox2 是只读的。

场景的主要部分是,只有当 textbox2.text 等于某些特定值(类型),例如“Polymeric, Cord and Seat”时,dropdown1 才会出现在 form1 中并填充一些颜色 - 从 DB 获取 -

你认为硬编码这个条件是一个正确的决定吗?如果没有,你有什么建议?

4

5 回答 5

0

假设您已经确定了 textbox1 中代码类型的逻辑,则可以将列表框启用为:

首先定义代码类型的枚举,


enum CodeType
{
    Polymeric,
    Cord,
    Seat
}

然后启用/禁用列表框,


public void test()
{
    if (Enum.IsDefined(typeof(CodeType), textBox2.Text.Trim()))
    {
        listBox1.Enabled = true;
    }
    else
    {
        listBox1.Enabled = false;
    }

    //Alternative
    //listBox1.Enabled = Enum.IsDefined(typeof(CodeType), textBox2.Text.Trim());
}

请注意,如果列表框较早隐藏,则您需要更改列表框的 Visible 属性而不是 Enabled 属性。

如果您想避免这种情况,那么您可以将类型名称移动到设置文件中,然后在运行时读取。

于 2011-01-04T08:51:57.397 回答
0

正如其他人所说,硬编码从来都不是一个好主意。您提到您正在访问数据库以获取颜色,为什么不在数据库中为代码/类型映射提供一个简单的查找表?虽然这可能是最复杂的解决方案,但由于多种原因,它是最强大的。

如果您只有一个 Web 服务器并且不需要担心数据复制,您可以只在 XML 文件中实现映射,并在滑动到期时将该文件缓存在内存中。

于 2011-01-28T17:27:08.593 回答
0

这完全取决于您项目的最终复杂性......如果它是一个 2 页的项目,那么硬编码没有任何问题,只要它只有一次并且它位于一个可访问的地方,不仅可以由您更改,也可以由任何人更改未来的那个项目。

例如,在您的助手类中添加

public const string[] SearchTypes = new string[] { "polymeric", "cord", "seat" };

添加一个扩展方法来帮助你

public static string ToJavaScriptArray(this string[] array) {
    string r = "";

    foreach(string s in array)
        r += String.Format("'{0}',", s);

    return r.TrimEnd(',');
}

然后,在您想要的特定页面中的 javascript 中,您可以轻松添加

var searchTypes = new Array(<%= SearchTypes.ToJavaScriptArray() %>);

并在您的代码中使用 javascript 数组来检查“类型”是否包含在该数组中,例如

让我们添加一个原型来帮助我们

Array.prototype.has = function(obj) {
    return this.indexOf(obj) >= 0;
}

然后

if( searchTypes.has( document.getElementById('textBox1').value ) { 
    // show dropdown        
}

希望能帮助到你。

于 2011-01-04T08:45:33.207 回答
0

如果硬编码的内容可能会发生变化,那么硬编码永远不会是好的。

例如,您需要添加一个新类型,并且您必须重新构建所有内容。

我的建议:如果可以的话,让代码和类型之间的映射是可配置的。

于 2011-01-04T08:11:42.847 回答
0

像这样的硬编码规则从来都不是一件好事。

我会创建一个类似于

class Something
{
    public string Keyword;
    public string KeywordType;
    public List<string> ListOfItems;
}

然后我会从数据库、xml 文件或其他任何东西中填充Something 的列表,这并不重要。

public List<Something> ListOfSomethings;

从您的数据存储中读取并将每个添加到列表中。

ListOfSomethings.Add(new Something("keyword","KeywordType",new List<String>{"Item1","Item2"});

然后,当他们在 textbox1 中输入内容时,您可以 linq 或循环 ListOfSomethings 以找到您需要的项目,并将 textbox2 设置为Something.KeywordType,然后如果 Something.ListOfItems 的计数 > 0,则将项目添加到组合框并制作它可见的。

于 2011-01-04T08:36:13.853 回答