Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/272.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使表单标识符等于C#中字符串变量的值?_C# - Fatal编程技术网

如何使表单标识符等于C#中字符串变量的值?

如何使表单标识符等于C#中字符串变量的值?,c#,C#,因此,我有一个名为CreateWindow的函数(stringid、int-width、int-height、stringtitle) 正如您可能猜到的,此函数在调用时创建一个窗口并添加参数。我打算这样做: public static void CreateWindow(string id,int width,int height,string title) { Form (value of id) = new Form(); (value of id).Text = title; (value

因此,我有一个名为CreateWindow的函数(stringid、int-width、int-height、stringtitle)

正如您可能猜到的,此函数在调用时创建一个窗口并添加参数。我打算这样做:

public static void CreateWindow(string id,int width,int height,string title) {
Form (value of id) = new Form();
(value of id).Text = title;
(value of id).Size = new Size(width,height);
Main(Form (value of id));
}

但是,我需要使窗体的标识符等于变量“id”,否则我将无法完成任何操作,我不能仅仅用例如
form1
来替换
(id的值)
,因为如果用户想要更改窗口的另一个属性,他应该能够简单地执行,例如:
(id的值).BackColor=Color.Green

我认为动态变量命名是不可能的。您可以有一个表单的静态字典,例如
公共静态字典表单
并使用索引的id将新表单添加到集合中

public static Dictionary<string, Form> forms = new Dictionary<string, Form>();

public static Form CreateWindow(string id, int width, int height, string title)
{
    if (!forms.ContainsKey(id))
        forms.Add(id, new Form());
    forms[id].Text = title;
    forms[id].Width = width;
    forms[id].Height = height;
    return forms[id];
}
publicstaticdictionary forms=newdictionary();
公共静态表单CreateWindow(字符串id、整数宽度、整数高度、字符串标题)
{
如果(!forms.ContainsKey(id))
添加(id,newform());
表单[id]。文本=标题;
表单[id]。宽度=宽度;
表格[id]。高度=高度;
返回表格[id];
}

我认为动态变量命名是不可能的。您可以有一个表单的静态字典,例如
公共静态字典表单
并使用索引的id将新表单添加到集合中

public static Dictionary<string, Form> forms = new Dictionary<string, Form>();

public static Form CreateWindow(string id, int width, int height, string title)
{
    if (!forms.ContainsKey(id))
        forms.Add(id, new Form());
    forms[id].Text = title;
    forms[id].Width = width;
    forms[id].Height = height;
    return forms[id];
}
publicstaticdictionary forms=newdictionary();
公共静态表单CreateWindow(字符串id、整数宽度、整数高度、字符串标题)
{
如果(!forms.ContainsKey(id))
添加(id,newform());
表单[id]。文本=标题;
表单[id]。宽度=宽度;
表格[id]。高度=高度;
返回表格[id];
}

我已经添加了一个完整的程序供您在下面尝试,没有任何错误处理以保持简短。只需创建一个新的windows应用程序并粘贴代码即可

using System;
using System.Collections.Generic;
using System.Drawing;
using System.Windows.Forms;

namespace CreateFormWindowSO
{
    static class Program
    {
        [STAThread]
        static void Main()
        {
            var windowId = "Some window";
            CreateWindow(windowId, 320, 240, "My Window");

            // Put a breakpoint on the line below and step over it with the debugger.
            // You'll see it returns the correct form object that was created above.
            var someWindow = GetWindow(windowId);

            // Do something with 'someWindow'.
        }

        static Form GetWindow(string id)
        {
            return windows[id];
        }

        static void CreateWindow(string id, int width, int height, string title)
        {
            Form form = new Form();
            form.Text = title;
            form.Size = new Size(width, height);

            windows.Add(id, form);
        }

        static Dictionary<string, Form> windows = new Dictionary<string, Form>();
    }
}
使用系统;
使用System.Collections.Generic;
使用系统图;
使用System.Windows.Forms;
命名空间CreateFormWindowSO
{
静态类程序
{
[状态线程]
静态void Main()
{
var windowId=“某个窗口”;
CreateWindow(windowId,320240,“我的窗口”);
//在下面的行上放置一个断点,并使用调试器跳过它。
//您将看到它返回上面创建的正确表单对象。
var someWindow=GetWindow(windowId);
//用“someWindow”做点什么。
}
静态表单GetWindow(字符串id)
{
返回窗口[id];
}
静态void CreateWindow(字符串id、整数宽度、整数高度、字符串标题)
{
表单=新表单();
形式.文本=标题;
外形尺寸=新尺寸(宽度、高度);
添加(id、表单);
}
静态字典窗口=新建字典();
}
}

字典背后的想法是,现在您可以将
表单
与特定的“键”(即本例中的
id
)关联起来。这使您能够通过为
GetWindow()
提供一个可能在其他地方跟踪的键来查找特定窗口。现在,您可以单独创建窗口,并在以后需要时随时获取它们。

我为您添加了一个完整的程序,供您在下面尝试,无需任何错误处理即可保持简短。只需创建一个新的windows应用程序并粘贴代码即可

using System;
using System.Collections.Generic;
using System.Drawing;
using System.Windows.Forms;

namespace CreateFormWindowSO
{
    static class Program
    {
        [STAThread]
        static void Main()
        {
            var windowId = "Some window";
            CreateWindow(windowId, 320, 240, "My Window");

            // Put a breakpoint on the line below and step over it with the debugger.
            // You'll see it returns the correct form object that was created above.
            var someWindow = GetWindow(windowId);

            // Do something with 'someWindow'.
        }

        static Form GetWindow(string id)
        {
            return windows[id];
        }

        static void CreateWindow(string id, int width, int height, string title)
        {
            Form form = new Form();
            form.Text = title;
            form.Size = new Size(width, height);

            windows.Add(id, form);
        }

        static Dictionary<string, Form> windows = new Dictionary<string, Form>();
    }
}
使用系统;
使用System.Collections.Generic;
使用系统图;
使用System.Windows.Forms;
命名空间CreateFormWindowSO
{
静态类程序
{
[状态线程]
静态void Main()
{
var windowId=“某个窗口”;
CreateWindow(windowId,320240,“我的窗口”);
//在下面的行上放置一个断点,并使用调试器跳过它。
//您将看到它返回上面创建的正确表单对象。
var someWindow=GetWindow(windowId);
//用“someWindow”做点什么。
}
静态表单GetWindow(字符串id)
{
返回窗口[id];
}
静态void CreateWindow(字符串id、整数宽度、整数高度、字符串标题)
{
表单=新表单();
形式.文本=标题;
外形尺寸=新尺寸(宽度、高度);
添加(id、表单);
}
静态字典窗口=新建字典();
}
}

字典背后的想法是,现在您可以将
表单
与特定的“键”(即本例中的
id
)关联起来。这使您能够通过为
GetWindow()
提供一个可能在其他地方跟踪的键来查找特定窗口。您现在可以单独创建窗口,并在以后需要时随时获取它们。

这些是局部变量。无论它们如何命名,其他人都无法访问它们。也许你需要的是一个
静态字典
?同意上面的评论。这让人感觉变量和引用的概念很混乱。为什么不将id保存为表单的属性(比如名称)?您正在尝试编写通用代码。所以使用泛型:staticvoidcreatewindow(…),其中T:Form。如果绝对必须是字符串,请查看Activator.CreateInstance()。这些是局部变量。无论它们如何命名,其他人都无法访问它们。也许你需要的是一个
静态字典
?同意上面的评论。这让人感觉变量和引用的概念很混乱。为什么不将id保存为表单的属性(比如名称)?您正在尝试编写通用代码。所以使用泛型:staticvoidcreatewindow(…),其中T:Form。如果必须是字符串,那么请查看Activator.CreateInstance()。好的,每个人都建议使用字典。能