weixin_42593776 2021-02-03 10:34 采纳率: 0%
浏览 217

c#中InitializeComponent()调用函数遇到的问题

cs中的代碼:

[AccessedThroughProperty("btnOK")]
private Button _btnOK;
internal virtual Button btnOK
{
get
{
return this._btnOK;
}
[MethodImpl(MethodImplOptions.Synchronized)]
set
{
if (this._btnOK != null)
{
this._btnOK.Click -= new EventHandler(this._btnOK_Click);
}
this._btnOK = value;
if (this._btnOK != null)
{
this._btnOK.Click += new EventHandler(this._btnOK_Click);
}
}
}

Designer.cs中的代碼

this.btnOK = new System.Windows.Forms.Button();

在.CS代码里确实存在属性的封装

在InitializeComponent()函数中也能调用,但是在页面显示上却提示类型“System.Windows.Forms.Form”没有名为“btnOK”的属性。

请求帮忙,谢谢了

  • 写回答

1条回答 默认 最新

  • 你知我知皆知 2024-07-24 13:07
    关注

    以下回答参考 皆我百晓生券券喵儿 等免费微信小程序相关内容作答,并由本人整理回复。

    在C#中,InitializeComponent() 是用于初始化控件组件的一种方法。它的主要作用是让控件组件在程序运行时自动加载和初始化。这个方法通常用于处理类成员的初始化工作,比如构造函数、事件绑定等。

    然而,在您的情况下,您尝试在 InitializeComponent() 中直接调用 btnOK 属性,这似乎存在问题。因为 InitializeComponent() 方法只负责初始化控件组件,它不会执行任何初始化操作或属性赋值。因此,试图在 InitializeComponent() 中调用属性可能无法正确地完成预期的操作。

    为了解决这个问题,您可以考虑以下几种方式之一来实现您的需求:

    1. InitializeComponent() 之前添加对 btnOK 的初始化操作:
    private Button _btnOK;
    internal virtual Button btnOK
    {
        get { return _btnOK; }
        set { _btnOK = value; }
    }
    
    1. 使用 DependencyObject.SetBinding() 来设置属性绑定:
    private Button _btnOK;
    internal virtual Button btnOK
    {
        get { return this.FindControl<Button>("btnOK"); }
        set { this.SetBinding(Button.TextProperty, "btnOK"); }
    }
    
    public DependencyObject FindControl(string name)
    {
        var result = base.FindName(name, this);
        if (result == null) {
            result = base.FindVisualChild(name, this);
        }
        return result;
    }
    
    public void SetBinding(DependencyProperty property, object dependencyValue)
    {
        base.SetBinding(property, dependencyValue);
    }
    
    1. 使用 DependencyObject.GetBindingExpression() 来获取属性绑定表达式:
    private Button _btnOK;
    internal virtual Button btnOK
    {
        get { return this.FindControl<Button>("btnOK"); }
        set { this.SetBinding(Button.TextProperty, GetBindingExpression("btnOK")); }
    }
    
    public BindingExpression GetBindingExpression(UIElement element)
    {
        return element.GetBindingExpression(element.Name);
    }
    
    1. 如果您希望使用 InitializeComponent() 初始化一个自定义对象,请确保在该对象中包含必要的属性和方法。
    2. 尝试将 btnOK 属性放在一个单独的类或者结构体中,并在 InitializeComponent() 中对其进行初始化。
    3. 如果问题仍然存在,可能是由于 InitializeComponent() 的设计导致的,建议查看 C# 文档或社区讨论以寻求解决方案。

    根据具体情况进行选择,希望能帮到你!

    评论

报告相同问题?

悬赏问题

  • ¥15 Kylin-Desktop-V10-GFB-Release-JICAI_02- 2207-Build14-ARM64.iso有没有这个版本的系统啊
  • ¥15 能不能通过蓝牙将传感器数据传送到手机上
  • ¥20 100元python和数据科学实验项目
  • ¥15 根据时间在调用出列表
  • ¥15 FastReport.community 编辑,table只显示“每页”最顶部和底部横线
  • ¥15 R 包chipseeker 安装失败
  • ¥15 Veeam Backup & Replication 9.5 还原问题
  • ¥15 vue-print-nb
  • ¥15 winfrom的datagridview下拉框变成了黑色,渲染不成功
  • ¥20 利用ntfy实现短信推送