复选框'和PictureBox1以独特的方式

rikor420

成员
已加入
2018年3月5日
留言内容
9
编程经验
Beginner
C#:
 private void button1_Click(object sender, EventArgs e)
    {
        if (checkBox1.Checked == true)
        {
            checkBox2.Checked = false;
            checkBox3.Checked = false;
            this.pictureBox1.Image = Image.FromFile("images\\1.png");
        }
        if (checkBox2.Checked == true)
        {
            checkBox2.Checked = false;
            checkBox1.Checked = true;
            checkBox3.Checked = true;
            this.pictureBox1.Image = Image.FromFile("images\\2.png");
        }
        if (checkBox3.Checked == true)
        {
            checkBox2.Checked = false;
            checkBox1.Checked = false;
            this.pictureBox1.Image = Image.FromFile("images\\3.png");
        }
    }

code.png

问题是这样,我希望能够选中checkbox1和checkbox2以显示图像3,然后当我想要更改图片时我将其清除,然后能够选择框2和3以显示图像1,我是初学者C#.NET表单,我认为这是正确的,但是似乎我在代码中做错了什么。有人可以帮我解决我所犯的错误,并向我展示正确正确的方法使其正常工作。谢谢。
 

rikor420

成员
已加入
2018年3月5日
留言内容
9
编程经验
Beginner
好吧,我只是浪费时间发布此信息,我只是回答了我的问题。我向我展示它是如何做到的。
C#:
private void button2_Click(object sender, EventArgs e)
        {
            this.pictureBox1.Image = null;
            checkBox1.Checked = false;
            checkBox2.Checked = false;
            checkBox3.Checked = false;
        }

        private void button1_Click(object sender, EventArgs e)
        {
            if (checkBox1.Checked)
            {
                this.pictureBox1.Image = Image.FromFile("images\\1.png");
            }
            if (checkBox2.Checked)
            {
                this.pictureBox1.Image = Image.FromFile("images\\2.png");
            }
            if (checkBox3.Checked)
            {
                this.pictureBox1.Image = Image.FromFile("images\\3.png");
            }
            if (checkBox1.Checked && checkBox2.Checked)
            {
                this.pictureBox1.Image = Image.FromFile("images\\3.png");
            }
        }
 

金西尼

C#论坛主持人
工作人员
已加入
2011年4月23日
留言内容
3,566
地点
悉尼,澳大利亚
编程经验
10+
这实际上并不是最好的方法。就像该代码一样,如果同时选中了checkBox1和checkBox2,那么您将创建三个Image对象,并简单地丢弃前两个对象。那很糟。仔细考虑。首先测试最具体的案例,只有在有意义的情况下才测试其他案例。考虑到这一点,您应该像这样进行测试:
if (checkBox3.Checked || (checkBox1.Checked && checkBox2.Checked))
{
    this.pictureBox1.Image = Image.FromFile("images\\3.png");
}
else if (checkBox1.Checked)
{
    this.pictureBox1.Image = Image.FromFile("images\\1.png");
}
else if (checkBox2.Checked)
{
    this.pictureBox1.Image = Image.FromFile("images\\2.png");
}

另外,如果要显示一个新的Image对象,则应处置要替换的对象。
 

rikor420

成员
已加入
2018年3月5日
留言内容
9
编程经验
Beginner
好吧,我会尝试一下,我正在为游戏做这个项目Mod,通过选中某些复选框的3个复选框来显示图像,将要合并很多图像。
 

金西尼

C#论坛主持人
工作人员
已加入
2011年4月23日
留言内容
3,566
地点
悉尼,澳大利亚
编程经验
10+
甚至有更多的理由不创建不需要的对象。您可能还需要考虑将映像作为资源嵌入到EXE中,而不是将它们作为松散文件分发。
 

rikor420

成员
已加入
2018年3月5日
留言内容
9
编程经验
Beginner
甚至有更多的理由不创建不需要的对象。您可能还需要考虑将映像作为资源嵌入到EXE中,而不是将它们作为松散文件分发。

C#:
private void button1_Click(object sender, EventArgs e)
        {
            if (checkBox3.Checked || (checkBox1.Checked && checkBox2.Checked))
            {
                //this.pictureBox1.Image = Image.FromFile("images\\3.png");
                this.pictureBox1.Image = Resource1._1;
            }
        }

这是对资源文件的正确方法吗?
 

金西尼

C#论坛主持人
工作人员
已加入
2011年4月23日
留言内容
3,566
地点
悉尼,澳大利亚
编程经验
10+
您可以在项目属性的“资源”页面上添加资源,然后通过Properties.Resources.Default访问它。

请注意,每次访问资源属性时都在创建一个新对象,因此通常最好只执行一次,将结果分配给一个字段并重复使用。否则,请确保将对象放置在它们之间。
 

rikor420

成员
已加入
2018年3月5日
留言内容
9
编程经验
Beginner
您可以在项目属性的“资源”页面上添加资源,然后通过Properties.Resources.Default访问它。

请注意,每次访问资源属性时都在创建一个新对象,因此通常最好只执行一次,将结果分配给一个字段并重复使用。否则,请确保将对象放置在它们之间。

好吧,我很困惑。当我尝试使用properties.Resources.Default时,没有(默认)方法或属性,有2个方法(Equals,ReferenceEquals)和2个属性(Culture,ResourceManager)。
 

金西尼

C#论坛主持人
工作人员
已加入
2011年4月23日
留言内容
3,566
地点
悉尼,澳大利亚
编程经验
10+
抱歉,我与Properties.Settings,默认存在混淆。该属性位于Properties.Resources上,而不是Properties.Resources.Default上。如果您没有看到图像的属性,那么就没有按照我之前的指示通过项目属性的“资源”页面添加它。一旦将其添加为资源,它就不再是文件。资源的全部意义在于它们是将数据编译到可执行文件本身中。
 
最佳 底部