如何使表单标识符等于C#中字符串变量的值?
因此,我有一个名为CreateWindow的函数(stringid、int-width、int-height、stringtitle) 正如您可能猜到的,此函数在调用时创建一个窗口并添加参数。我打算这样做:如何使表单标识符等于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
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()。好的,每个人都建议使用字典。能