0

我被分配了在 C# 中使用 DLL 文件的任务。我创建了 DLL 文件 (Prog1210.dll) 并将其作为参考添加到 C# 中的解决方案资源管理器中。DLL 文件有一个变量 txtNumber1 试图在这个主类中访问。

只是想知道为什么它在这个类形式的DLL中识别ValidateTextbox,但是在using语句中说它不识别Prog1210,并且不识别txtNumber1。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using Prog1210;

namespace StaticClass
{
    class Class1
    {
        private void btnValidate_Click(object sender, EventArgs e)
        {
        // Use the ValidateTexbox class that has been added to this project
            if (ValidateTextbox.IsPresent(txtNumber1) &&
            ValidateTextbox.IsDouble(txtNumber1) &&
            ValidateTextbox.IsWithinRange(txtNumber1, 1.0, 100.0))
            {
                MessageBox.Show("Textbox value is valid!", "Good Data");
            }
            else
            {
            // The ValidateTexbox methods assigns an error message to the Tag
                // property of the textbox.
                string display = (string)txtNumber1.Tag;
                MessageBox.Show(display, "Bad Data");
            txtNumber1.Focus();
        }
    }
}

}

我的 DLL 文件:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows.Forms; // required to work with Textboxes
public static class ValidateTextbox
{
// A class of static methods that will validate data in a textbox.
// An error message is assigned to the Tag property of the textbox.
//******** Empty Textbox Check ****************//
public static bool IsPresent(TextBox textbox)
{
if (textbox.Text == "")
{
textbox.Tag = "A value is required...";
return false;
}
return true;
}
// ******* Valid Data Type Check ***********//
public static bool IsInt(TextBox textbox)
{
try
{
Convert.ToInt32(textbox.Text);
return true;
}
catch (Exception)
{
textbox.Tag = "The value must be an integer...";
return false;
}
}
public static bool IsDouble(TextBox textbox)
{
try
{
Convert.ToDouble(textbox.Text);
return true;
}
catch (Exception)
{
textbox.Tag = "The value must be a double...";
return false;
}
}
public static bool IsDecimal(TextBox textbox)
{
try
{
Convert.ToDecimal(textbox.Text);
return true;
}
catch (Exception)
{
textbox.Tag = "The value must be a decimal...";
return false;
}
}
//*********** Valid Range Check - Overloaded Methods *************//
4

3 回答 3

1

只是想知道为什么它在这种类形式的DLL中识别ValidateTextbox,但是在using语句中说它不识别Prog1210,

这是因为您的 Prog1210.dll 没有使用命名空间。如果您已将所有内容都指定在 Prog1210 命名空间中,那么它将按您的预期工作。

如果您想更改此设置,请将您的 DLL 代码更改为:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows.Forms; // required to work with Textboxes

namespace Prog1210
{
    public static class ValidateTextbox
    {
        // .. your code
    }
} // Add closing brace for namespace

并且不识别 txtNumber1。

内没有txtNumber1 变量Class1。您只能验证TextBox调用该方法的范围内存在的变量。

于 2013-09-20T00:08:38.437 回答
0

我猜你的 DLL 是用 C++ 或其他一些本地语言构建的。您不能从托管程序集/dll 中使用这些类型的 DLL。

要工作,它需要是 .NET 程序集/DLL 或托管 C++/CLI DLL。

如果您真的无法更改该 DLL,您可以使用 C++/CLI DLL 包装它。有关更多信息: 使用 C++/CLI 作为“中间件”从本机 C++ 使用 .NET 类

于 2013-09-20T00:03:19.533 回答
0

您需要 prog dll 中的命名空间,并且您需要将第一段代码中的类标记为 txtnumber1 的公共。并确保您将 txtnumber1 作为表单中文本框的 id

于 2013-09-20T00:07:19.327 回答