来自复选框列表的随机文件(流)
Randomized File (Stream) From List of Checkboxes
所以这是一个由两部分组成的问题。将问题 #2 移至顶部,因为 #1 已得到解答。
问题 #2 - 使用 Form1 初始实例(遗憾的是未命名)的复选框来设置允许的对象的理想方法是什么。我在想也许我可以有一个隐藏的表单来保存变量,并使用从 Form1 调用的设置访问器来更改复选框并更新我在上述函数中调用的列表或字典?
首先,我有多个图像——目前有两个,但以后还会有更多——并且想在每次调用该函数时随机使用其中一个。目前我正在这样做:
System.IO.Stream file;
Random rnd = new Random(int.Parse(Guid.NewGuid().ToString().Substring(0, 8), System.Globalization.NumberStyles.HexNumber));
int a = rnd.Next(0, 2);
if (a == 0) {file = thisExe.GetManifestResourceStream("QATestFileGenTools.checkFront1.bmp");}
else if (a == 1) {file = thisExe.GetManifestResourceStream("QATestFileGenTools.checkFront2.bmp");}
else {file = thisExe.GetManifestResourceStream("QATestFileGenTools.checkFront2.bmp");}
计划是最终的,否则就是将来使用该图像作为默认图像。正如所看到的,每个图像都是嵌入在可执行文件中的资源。我想清理它,可能使用字典或列表,我随机得到一个介于 0
和 list.size-1
之间的数字,然后将 file
设置为等于该数字。
问题 #1 - 如何制作资源指针的列表或字典,然后将 file
设置为那个时候的资源?
现在,目前我无法使用我的复选框。我在 Form1
上有两个复选框来反映两个当前图像中的每一个。由于无法调用 Form1.cbImage1.Checked
因为初始实例没有 name/identifier,我正在考虑设置一个全局变量,我不愿意这样做。我尝试设置一个 get 访问器,但当然遇到了同样的问题。
提前致谢!
对于问题 #1:
var dict = new Dictionary<int, string>();
dict.Add(0, "QATestFileGenTools.checkFront1.bmp");
dict.Add(1,"QATestFileGenTools.checkFront2.bmp");
dict.Add(2, "QATestFileGenTools.checkFront2.bmp");
Random rnd = new Random(DateTime.Now.Millisecond);
int randomInt = rnd.Next(0, 2);
string resourceName = dict[randomInt];
System.IO.Stream file file = thisExe.GetManifestResourceStream(resourceName);
编辑: 将随机种子更改为更简单且可能同样有效的东西。
最后,对于问题 #2,我正在创建对象(配置数据)字典以及对各种工作人员的调用 类。这可能很笨拙,但它允许我在单个变量、数组、整数、布尔值和字符串中发送各种数据。只要代码注释好,在另一边进行类型转换就很容易了。
所以这是一个由两部分组成的问题。将问题 #2 移至顶部,因为 #1 已得到解答。
问题 #2 - 使用 Form1 初始实例(遗憾的是未命名)的复选框来设置允许的对象的理想方法是什么。我在想也许我可以有一个隐藏的表单来保存变量,并使用从 Form1 调用的设置访问器来更改复选框并更新我在上述函数中调用的列表或字典?
首先,我有多个图像——目前有两个,但以后还会有更多——并且想在每次调用该函数时随机使用其中一个。目前我正在这样做:
System.IO.Stream file;
Random rnd = new Random(int.Parse(Guid.NewGuid().ToString().Substring(0, 8), System.Globalization.NumberStyles.HexNumber));
int a = rnd.Next(0, 2);
if (a == 0) {file = thisExe.GetManifestResourceStream("QATestFileGenTools.checkFront1.bmp");}
else if (a == 1) {file = thisExe.GetManifestResourceStream("QATestFileGenTools.checkFront2.bmp");}
else {file = thisExe.GetManifestResourceStream("QATestFileGenTools.checkFront2.bmp");}
计划是最终的,否则就是将来使用该图像作为默认图像。正如所看到的,每个图像都是嵌入在可执行文件中的资源。我想清理它,可能使用字典或列表,我随机得到一个介于 0
和 list.size-1
之间的数字,然后将 file
设置为等于该数字。
问题 #1 - 如何制作资源指针的列表或字典,然后将 file
设置为那个时候的资源?
现在,目前我无法使用我的复选框。我在 Form1
上有两个复选框来反映两个当前图像中的每一个。由于无法调用 Form1.cbImage1.Checked
因为初始实例没有 name/identifier,我正在考虑设置一个全局变量,我不愿意这样做。我尝试设置一个 get 访问器,但当然遇到了同样的问题。
提前致谢!
对于问题 #1:
var dict = new Dictionary<int, string>();
dict.Add(0, "QATestFileGenTools.checkFront1.bmp");
dict.Add(1,"QATestFileGenTools.checkFront2.bmp");
dict.Add(2, "QATestFileGenTools.checkFront2.bmp");
Random rnd = new Random(DateTime.Now.Millisecond);
int randomInt = rnd.Next(0, 2);
string resourceName = dict[randomInt];
System.IO.Stream file file = thisExe.GetManifestResourceStream(resourceName);
编辑: 将随机种子更改为更简单且可能同样有效的东西。
最后,对于问题 #2,我正在创建对象(配置数据)字典以及对各种工作人员的调用 类。这可能很笨拙,但它允许我在单个变量、数组、整数、布尔值和字符串中发送各种数据。只要代码注释好,在另一边进行类型转换就很容易了。