如何让控件重绘Windows窗体?

Thi*_*Use 3 c# redraw visual-studio winforms

我不确定要寻找的是“重绘” ...我是手工设计Windows表单的新手。我创建了一个将使用“ TableLayoutPanel”作为传递变量的类,并在该表布局面板中进行了自己的设计,以便可以重用控件并调整其参数以适合其包含的数据。

我有一个事件,它将在调整框架大小时重新绘制控件,效果很好。但是,当我第一次使用.Show()表单时,它不会显示class中的任何子控件。如果我手动调用Resize事件中调用的“ resize”方法,它也不会重绘自身。

我得到的只是一个空白的“ TableLayoutPanel”,直到我手动调整了在父TableLayoutPanel上调用“ Resize”事件的窗口的大小。

这是我的类的正式版本,其中删除了与方法无关的方法:

    public class DataTableFrame : Form
    {

        TableLayoutPanel MyFrame;
        Size ParentSize;
        int Row = 1;
        int Col = 1;
        int LabelWidth = 75;
        int TextWidth = 150;            
        List<DataObject> MyData = new List<DataObject>();


        public class DataObject
        {...
        }

        public DataTableFrame() { }

        public DataTableFrame(TableLayoutPanel Parent)
        {
            MyFrame = Parent;
            MyFrame.AutoScroll = true;
            ParentSize = MyFrame.Size;
            MyFrame.Layout += new LayoutEventHandler(MyFrame_Layout);
        }

        void MyFrame_Layout(object sender, LayoutEventArgs e)...

        public void AddData(string Label, string Data)...

        public void EvaluateRowCol()...

        public void RowsColums(int Rows, int Cols)...

        public void PopulateControls()...

        public void Refresh()
        {
           // What do I put here to force a redraw???
        }

    }
Run Code Online (Sandbox Code Playgroud)

Jad*_*ade 8

尝试

this.Invalidate(); //Refreshes or invoke the control to redraw
Run Code Online (Sandbox Code Playgroud)

要么

this.Refresh();
Run Code Online (Sandbox Code Playgroud)

注意:Refresh()已经在Form对象属性中,您无需声明它。

  • *哦,我很愚蠢*-这是我的错。我已经将子控件的评估逻辑放在“检查对象是否已调整大小”事件中。因此,直到调整窗口大小后,它才真正创建任何子控件。**很抱歉浪费您的时间而导致堆栈溢出。**以后在编写代码时提出问题时,我会变得更加清醒。 (2认同)