Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/tensorflow/5.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# 在下述情况下,PictureBox或标签可能无法显示各自的图像或文本的原因有哪些?_C#_Winforms - Fatal编程技术网

C# 在下述情况下,PictureBox或标签可能无法显示各自的图像或文本的原因有哪些?

C# 在下述情况下,PictureBox或标签可能无法显示各自的图像或文本的原因有哪些?,c#,winforms,C#,Winforms,正如你在下面的截图中所看到的,我制作了一个带有标签(比图片盒小)的图片盒。我已将PictureBox设置为包含第一个屏幕截图中可见的绿色矩形图像,并将标签设置为具有“LimeGreen”背景色和“ControlText”文本颜色(仅为黑色) 默认情况下,这两个对象的“可见”属性都设置为“false”,但在整个程序过程中,这些属性都会更改为“true”,这是我通过调试确定的。第二个屏幕截图是在程序中将这些属性更改为“true”后拍摄的 这些对象的另一个特性是在程序过程中发生变化的主要内容:对于标签

正如你在下面的截图中所看到的,我制作了一个带有标签(比图片盒小)的图片盒。我已将PictureBox设置为包含第一个屏幕截图中可见的绿色矩形图像,并将标签设置为具有“LimeGreen”背景色和“ControlText”文本颜色(仅为黑色)

默认情况下,这两个对象的“可见”属性都设置为“false”,但在整个程序过程中,这些属性都会更改为“true”,这是我通过调试确定的。第二个屏幕截图是在程序中将这些属性更改为“true”后拍摄的

这些对象的另一个特性是在程序过程中发生变化的主要内容:对于标签,文本从不存在变为表示“75%”,PictureBox的图像变为75%由绿色填充的矩形。通过调试,我知道图像和文本设置正确

但是,正如在第二个屏幕截图中所看到的,我打算发生的事情(以及我认为应该发生的事情,正如我通过调试确定的那样)没有发生。在程序运行期间的任何时候,图像和文本都不会出现在屏幕上。但是,在第二个屏幕截图中,您可以看到我在标签上添加的“FixedSingle”边框。这仅在代码指示标签和PictureBox应该可见的时间范围内可见,因此我假设标签和PictureBox实际上在此处设置为可见,但由于某些原因,它们的文本和图像没有显示。默认情况下,我将PictureBox设置为显示的图像也不会显示

在发现Visible属性以及图像和文本分配没有问题后,我的第一个想法是,一个对象可能与标签和PictureBox重叠。然而,我发现,当我将两个对象都设置在它们共享空间的对象前面时,这个问题并没有消失

我没有发现其他PictureBox或Label的问题,所有这些都是我使用与本例中使用的过程几乎相同的过程来实现的。两种情况之间唯一值得注意的区别是,我在不起作用的PictureBox和标签中使用System.Threading.Thread.Sleep。该函数是否会以某种方式干扰图像和文本加载?除了Visible为false、文本和图像设置不正确以及在这种情况下图像和文本不会加载的对象重叠之外,可能还有其他原因吗

以下是截图:

(是的,占位符图像是愚蠢的。我上面提到的边框是中间的黑色矩形)

下面是给我带来麻烦的代码:

switch (char1ChosenSkill.numberOfTargets) //this switch block can be ignored; for now it always goes to case 1
                            {
                                case 1:
                                    Side2HPBoxList[BasicProcess.side2.IndexOf(targetList[0])].Visible = true; //sets the PictureBox in question's Visible to true
                                    Thread.Sleep(500); //waits half a second(I think)
                                    targetList[0] = char1ChosenSkill.effect(targetList[0]); //this can be ignored since it does not effect the PictureBox or Label
                                    Side2HPBoxList[BasicProcess.side2.IndexOf(targetList[0])].Image = UpdateHpBar(targetList[0], BasicProcess.side2); //runs a function that I will post and document below this block of code
                                    Thread.Sleep(2000); //waits 2 seconds(I think)
                                    Side2HPBoxList[BasicProcess.side2.IndexOf(targetList[0])].Visible = false; //sets the PictureBox in question's Visible back to false
                                    Menu2Background.Visible = (char2 != null); //this can be ignored since it does not effect the PictureBox or Label
                                    break;
                            }
UpdateHpBar函数:

        private Image UpdateHpBar(BasicCharacter target, List<BasicCharacter> side) 
        {
            PictureBox HPBox = side2HPbox1; //since I got an error claiming that HPBox isn't assigned before, I set it to a default value before changing it(note that the default value is the PictureBox in question)
            //ints generated for a switch block later on
            int NewHP = target.HP.value * 100; 
            int MaxHP = target.HP.max;
            //this block assigns HPBox to a PictureBox based on UpdateHpBar's arguments
            foreach (BasicCharacter item in side) 
            {
                if (item == target)
                {
                    switch (side.IndexOf(item))
                    {
                        case 0:
                            HPBox = side2HPbox1;
                            break;
                        case 1:
                            HPBox = side2HPbox2;
                            break;
                        case 2:
                            HPBox = side2HPbox3;
                            break;
                        case 3:
                            HPBox = side2HPbox4;
                            break;
                        default:
                            HPBox = side2HPbox1;
                            break;
                    }
                }
            }
            
            int percHP = (NewHP / MaxHP); //calculates a new int based on the ints generated above
            //this switch block assigns an Image to HPBox depending on the value of percHP
            switch (percHP)
            {
                case 0:
                    HPBox.Image = Properties.Resources.EnemyHPBar0;
                    break;
                case 1:
                    HPBox.Image = Properties.Resources.EnemyHPBar1;
                    break;
                case 2:
                    HPBox.Image = Properties.Resources.EnemyHPBar2;
                    break;
                case 3:
                    HPBox.Image = Properties.Resources.EnemyHPBar3;
                    break;
                case 4:
                    HPBox.Image = Properties.Resources.EnemyHPBar4;
                    break;
                case 5:
                    HPBox.Image = Properties.Resources.EnemyHPBar5;
                    break;
                case 6:
                    HPBox.Image = Properties.Resources.EnemyHPBar6;
                    break;
                case 7:
                    HPBox.Image = Properties.Resources.EnemyHPBar7;
                    break;
                case 8:
                    HPBox.Image = Properties.Resources.EnemyHPBar8;
                    break;
                case 9:
                    HPBox.Image = Properties.Resources.EnemyHPBar9;
                    break;
                case 10:
                    HPBox.Image = Properties.Resources.EnemyHPBar10;
                    break;
                case 11:
                    HPBox.Image = Properties.Resources.EnemyHPBar11;
                    break;
                case 12:
                    HPBox.Image = Properties.Resources.EnemyHPBar12;
                    break;
                case 13:
                    HPBox.Image = Properties.Resources.EnemyHPBar13;
                    break;
                case 14:
                    HPBox.Image = Properties.Resources.EnemyHPBar14;
                    break;
                case 15:
                    HPBox.Image = Properties.Resources.EnemyHPBar15;
                    break;
                case 16:
                    HPBox.Image = Properties.Resources.EnemyHPBar16;
                    break;
                case 17:
                    HPBox.Image = Properties.Resources.EnemyHPBar17;
                    break;
                case 18:
                    HPBox.Image = Properties.Resources.EnemyHPBar18;
                    break;
                case 19:
                    HPBox.Image = Properties.Resources.EnemyHPBar19;
                    break;
                case 20:
                    HPBox.Image = Properties.Resources.EnemyHPBar20;
                    break;
                case 21:
                    HPBox.Image = Properties.Resources.EnemyHPBar21;
                    break;
                case 22:
                    HPBox.Image = Properties.Resources.EnemyHPBar22;
                    break;
                case 23:
                    HPBox.Image = Properties.Resources.EnemyHPBar23;
                    break;
                case 24:
                    HPBox.Image = Properties.Resources.EnemyHPBar24;
                    break;
                case 25:
                    HPBox.Image = Properties.Resources.EnemyHPBar25;
                    break;
                case 26:
                    HPBox.Image = Properties.Resources.EnemyHPBar26;
                    break;
                case 27:
                    HPBox.Image = Properties.Resources.EnemyHPBar27;
                    break;
                case 28:
                    HPBox.Image = Properties.Resources.EnemyHPBar28;
                    break;
                case 29:
                    HPBox.Image = Properties.Resources.EnemyHPBar29;
                    break;
                case 30:
                    HPBox.Image = Properties.Resources.EnemyHPBar30;
                    break;
                case 31:
                    HPBox.Image = Properties.Resources.EnemyHPBar31;
                    break;
                case 32:
                    HPBox.Image = Properties.Resources.EnemyHPBar32;
                    break;
                case 33:
                    HPBox.Image = Properties.Resources.EnemyHPBar33;
                    break;
                case 34:
                    HPBox.Image = Properties.Resources.EnemyHPBar34;
                    break;
                case 35:
                    HPBox.Image = Properties.Resources.EnemyHPBar35;
                    break;
                case 36:
                    HPBox.Image = Properties.Resources.EnemyHPBar36;
                    break;
                case 37:
                    HPBox.Image = Properties.Resources.EnemyHPBar37;
                    break;
                case 38:
                    HPBox.Image = Properties.Resources.EnemyHPBar38;
                    break;
                case 39:
                    HPBox.Image = Properties.Resources.EnemyHPBar39;
                    break;
                case 40:
                    HPBox.Image = Properties.Resources.EnemyHPBar40;
                    break;
                case 41:
                    HPBox.Image = Properties.Resources.EnemyHPBar41;
                    break;
                case 42:
                    HPBox.Image = Properties.Resources.EnemyHPBar42;
                    break;
                case 43:
                    HPBox.Image = Properties.Resources.EnemyHPBar43;
                    break;
                case 44:
                    HPBox.Image = Properties.Resources.EnemyHPBar44;
                    break;
                case 45:
                    HPBox.Image = Properties.Resources.EnemyHPBar45;
                    break;
                case 46:
                    HPBox.Image = Properties.Resources.EnemyHPBar46;
                    break;
                case 47:
                    HPBox.Image = Properties.Resources.EnemyHPBar47;
                    break;
                case 48:
                    HPBox.Image = Properties.Resources.EnemyHPBar48;
                    break;
                case 49:
                    HPBox.Image = Properties.Resources.EnemyHPBar49;
                    break;
                case 50:
                    HPBox.Image = Properties.Resources.EnemyHPBar50;
                    break;
                case 51:
                    HPBox.Image = Properties.Resources.EnemyHPBar51;
                    break;
                case 52:
                    HPBox.Image = Properties.Resources.EnemyHPBar52;
                    break;
                case 53:
                    HPBox.Image = Properties.Resources.EnemyHPBar53;
                    break;
                case 54:
                    HPBox.Image = Properties.Resources.EnemyHPBar54;
                    break;
                case 55:
                    HPBox.Image = Properties.Resources.EnemyHPBar55;
                    break;
                case 56:
                    HPBox.Image = Properties.Resources.EnemyHPBar56;
                    break;
                case 57:
                    HPBox.Image = Properties.Resources.EnemyHPBar57;
                    break;
                case 58:
                    HPBox.Image = Properties.Resources.EnemyHPBar58;
                    break;
                case 59:
                    HPBox.Image = Properties.Resources.EnemyHPBar59;
                    break;
                case 60:
                    HPBox.Image = Properties.Resources.EnemyHPBar60;
                    break;
                case 61:
                    HPBox.Image = Properties.Resources.EnemyHPBar61;
                    break;
                case 62:
                    HPBox.Image = Properties.Resources.EnemyHPBar62;
                    break;
                case 63:
                    HPBox.Image = Properties.Resources.EnemyHPBar63;
                    break;
                case 64:
                    HPBox.Image = Properties.Resources.EnemyHPBar64;
                    break;
                case 65:
                    HPBox.Image = Properties.Resources.EnemyHPBar65;
                    break;
                case 66:
                    HPBox.Image = Properties.Resources.EnemyHPBar66;
                    break;
                case 67:
                    HPBox.Image = Properties.Resources.EnemyHPBar67;
                    break;
                case 68:
                    HPBox.Image = Properties.Resources.EnemyHPBar68;
                    break;
                case 69:
                    HPBox.Image = Properties.Resources.EnemyHPBar69;
                    break;
                case 70:
                    HPBox.Image = Properties.Resources.EnemyHPBar70;
                    break;
                case 71:
                    HPBox.Image = Properties.Resources.EnemyHPBar71;
                    break;
                case 72:
                    HPBox.Image = Properties.Resources.EnemyHPBar72;
                    break;
                case 73:
                    HPBox.Image = Properties.Resources.EnemyHPBar73;
                    break;
                case 74:
                    HPBox.Image = Properties.Resources.EnemyHPBar74;
                    break;
                case 75:
                    HPBox.Image = Properties.Resources.EnemyHPBar75;
                    break;
                case 76:
                    HPBox.Image = Properties.Resources.EnemyHPBar76;
                    break;
                case 77:
                    HPBox.Image = Properties.Resources.EnemyHPBar77;
                    break;
                case 78:
                    HPBox.Image = Properties.Resources.EnemyHPBar78;
                    break;
                case 79:
                    HPBox.Image = Properties.Resources.EnemyHPBar79;
                    break;
                case 80:
                    HPBox.Image = Properties.Resources.EnemyHPBar80;
                    break;
                case 81:
                    HPBox.Image = Properties.Resources.EnemyHPBar81;
                    break;
                case 82:
                    HPBox.Image = Properties.Resources.EnemyHPBar82;
                    break;
                case 83:
                    HPBox.Image = Properties.Resources.EnemyHPBar83;
                    break;
                case 84:
                    HPBox.Image = Properties.Resources.EnemyHPBar84;
                    break;
                case 85:
                    HPBox.Image = Properties.Resources.EnemyHPBar85;
                    break;
                case 86:
                    HPBox.Image = Properties.Resources.EnemyHPBar86;
                    break;
                case 87:
                    HPBox.Image = Properties.Resources.EnemyHPBar87;
                    break;
                case 88:
                    HPBox.Image = Properties.Resources.EnemyHPBar88;
                    break;
                case 89:
                    HPBox.Image = Properties.Resources.EnemyHPBar89;
                    break;
                case 90:
                    HPBox.Image = Properties.Resources.EnemyHPBar90;
                    break;
                case 91:
                    HPBox.Image = Properties.Resources.EnemyHPBar91;
                    break;
                case 92:
                    HPBox.Image = Properties.Resources.EnemyHPBar92;
                    break;
                case 93:
                    HPBox.Image = Properties.Resources.EnemyHPBar93;
                    break;
                case 94:
                    HPBox.Image = Properties.Resources.EnemyHPBar94;
                    break;
                case 95:
                    HPBox.Image = Properties.Resources.EnemyHPBar95;
                    break;
                case 96:
                    HPBox.Image = Properties.Resources.EnemyHPBar96;
                    break;
                case 97:
                    HPBox.Image = Properties.Resources.EnemyHPBar97;
                    break;
                case 98:
                    HPBox.Image = Properties.Resources.EnemyHPBar98;
                    break;
                case 99:
                    HPBox.Image = Properties.Resources.EnemyHPBar99;
                    break;
                case 100:
                    HPBox.Image = Properties.Resources.EnemyHPBar100;
                    break;
                default:
                    HPBox.Image = Properties.Resources.EnemyHPBar100;
                    break;
            }
            
            return HPBox.Image; //returns the image assigned to HPBox(this means in the first code block in this post, this function is used to assign an image to the PictureBox in question, in this case "Properties.Resources.EnemyHPBar75")
        }
你说:

这些案例之间唯一显著的区别是我使用的是 System.Threading.Thread.Sleep在不起作用的PictureBox和 标签。该函数是否会以某种方式干扰图像和文本加载

这正是问题所在。将可见性设置为true、sleep,然后将可见性设置回false。在用户界面线程上执行
Sleep()
时,它会阻止执行,从而阻止UI更新/重新绘制。您只看到最后一个操作,即将其设置回false。解决此问题的一种方法是使用async/await和Task.Delay

这基本上是您当前正在做的(并且是不正确的):

下面是相同的代码,但使用async/await和Task.Delay()

你说:

这些案例之间唯一显著的区别是我使用的是 System.Threading.Thread.Sleep在不起作用的PictureBox和 标签。该函数是否会以某种方式干扰图像和文本加载

这正是问题所在。将可见性设置为true、sleep,然后将可见性设置回false。在用户界面线程上执行
Sleep()
时,它会阻止执行,从而阻止UI更新/重新绘制。您只看到最后一个操作,即将其设置回false。解决此问题的一种方法是使用async/await和Task.Delay

这基本上是您当前正在做的(并且是不正确的):

下面是相同的代码,但使用async/await和Task.Delay()


谢谢你的信息!抱歉,我假设Thread.Sleep的工作原理与简单语言中的Sleep函数类似。我确实阅读了微软网站上的函数文档,但我显然误解了它所说的lol。谢谢你提供的信息!抱歉,我假设Thread.Sleep的工作原理与简单语言中的Sleep函数类似。我确实阅读了微软网站上的函数文档,但我显然误解了它所说的lol。
        private void side2HPBox1_ChangeVisiblity(object sender, EventArgs e)
        {
            Side2HPText1.Visible = side2HPbox1.Visible;
            side2HPbox1DisplayNum = (BasicProcess.side2[0].HP.value*100) / (BasicProcess.side2[0].HP.max); //calculates the number displayed in the Label's text
            Side2HPText1.Text = side2HPbox1DisplayNum + " %"; //sets the label's text
        }
    // incorrect
    private void button1_Click(object sender, EventArgs e)
    {
        label1.Visible = true;
        System.Threading.Thread.Sleep(2000);
        label1.Visible = false;
    }
    // correct
    private async void button1_Click(object sender, EventArgs e)
    {
        label1.Visible = true;
        await Task.Delay(2000);
        label1.Visible = false;
    }