winforms 为什么当把索引从主窗体传递到用户控件时,索引总是0?

t9aqgxwy  于 2022-11-16  发布在  其他
关注(0)|答案(1)|浏览(127)

在用户控制代码顶部

int myindex = 0;
MainForm mainForm;

构造器

public HistogramaDesenat(MainForm mf)
        {
            mainForm = mf;
            UP();
        }

UP方法

public void UP()
        {
            myindex = mainForm.index;
        }

以主要形式

public int index = 0;
        private void listView1_SelectedIndexChanged(object sender, EventArgs e)
        {
            if (listView1.SelectedItems.Count > 0)
            {
                index = listView1.SelectedIndices[0];
                histogram.UP();
                Histogram.Invalidate();
            }
        }

在UP方法的usercontrol类中,当使用断点时,我看到myindex值正在从主窗体中的选定索引获取值。
i在列表中选择查看索引10中的项目,并且i在用户控件中看到该索引

但是当我在usercontrolpaint事件中使用变量myindex时,由于某种原因,myindex的值是0而不是10:

private void HistogramaDesenat_Paint(object sender, PaintEventArgs e)
        {
            if (myIsDrawing)
            {

                Graphics g = e.Graphics;
                Pen myPen1 = new Pen(new SolidBrush(Color.Red), myXUnit);
                Pen myPen = new Pen(new SolidBrush(myColor),myXUnit);
                //The width of the pen is given by the XUnit for the control.
                for (int i=0;i<myValues.Length;i++)
                {
                    //We draw each line
                    g.DrawLine(myPen,
                        new PointF(myOffset + (i*myXUnit), this.Height - myOffset), 
                        new PointF(myOffset + (i*myXUnit), this.Height - myOffset - myValues[i] * myYUnit));

                    //We plot the coresponding index for the maximum value.
                    if (myValues[i]==myMaxValue)
                    {
                        SizeF mySize = g.MeasureString(i.ToString(),myFont);

                        g.DrawString(i.ToString(),myFont,new SolidBrush(myColor),
                            new PointF(myOffset + (i*myXUnit) - (mySize.Width/2), this.Height - myFont.Height ),
                            System.Drawing.StringFormat.GenericDefault);
                    }
                }

                
                    g.DrawLine(myPen1,
                        new PointF(myOffset + (myindex * myXUnit), this.Height - myOffset),
                        new PointF(myOffset + (myindex * myXUnit), this.Height - myOffset - myValues[myindex] * myYUnit));
oug3syen

oug3syen1#

C#是区分大小写的。我在listView1_SelectedIndexChanged()方法中看到了这一点:

histogram.UP();
Histogram.Invalidate();

请注意这两行中小写和大写的H之间的区别。这是两个不同的变量,可能引用控件的不同示例。

相关问题