如何从表单中调用自定义控件中的函数

时间:2014-03-21 18:44:25

标签: c# .net winforms

请考虑以下Windows窗体代码:

namespace SameWinFormsProject
{
    // Top-level form.

    public partial class Form1: Form
    {
        public Form1()
        {
            InitializeComponent(); // Boilerplate code.
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            Rectangle local;

            local = GetButtonFace(); // error CS0103: The name 'GetButtonFace' does not exist in the current context
        }
    }

    // Custom button control.

    class MyCustomButton: Button
    {
        Rectangle face;

        protected override void OnPaint(PaintEventArgs e)
        {
            // ...
        }

        Rectangle GetButtonFace()
        {
            return face;
        }
    }
}

如何从顶级窗体GetButtonFace()中的任何位置调用MyCustomButton函数(属于Form1类)?

2 个答案:

答案 0 :(得分:2)

您需要一个实例变量来访问GetButtonFace()方法,因为它在另一个类中。

试试这个:

MyCustomButton mybutton=new MyCustomButton();
local = mybutton.GetButtonFace();

答案 1 :(得分:2)

首先,默认情况下,成员的可见性为private

第二,face矩形是否应该在没有MyCustomButton实例的情况下可用?如果是这样,那就让它静止:

internal static GetButtonFace()
{
    return face;
}

当然face也必须是静态的:

static Rectangle face;

如果静态方法不是您想要的,那么您需要一个MyCustomButton实例来调用您的方法,正如Sudhakar所建议的那样。