You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

WinForms中如何通过接口统一访问不同表单的Venue属性

统一访问WinForms场馆表单属性的实现方案

问题背景

已有定义好的Venue接口:

internal interface Venue
{
    int VenueID { get; set; }
    string VenueName { get; set; }
    string VenueAddress1 { get; set; }
    string VenueAddress2 { get; set; }
    string City { get; set; }
    string County { get; set; }
    string Eircode { get; set; }
    int Capacity { get; set; }
    string PhoneNo { get; set; }
    int Fee { get; set; }
    string Status { get; set; }
}

同时有两个WinForms表单frmAddVenue(新增场馆)和frmUpdateVenue(修改场馆),二者都作为TabPage子控件,且都有从控件获取数据的逻辑。当前只能通过具体表单类型访问属性,无法用统一的类型进行操作,希望实现跨表单的属性统一访问。

实现方案

1. 让表单类直接实现Venue接口

无需额外创建继承自VenueModel的类,直接让两个表单类实现Venue接口,在接口属性的get/set方法中直接操作表单控件。这样表单自身就是接口的实现者,能直接访问内部控件实例。

以frmAddVenue为例:

public partial class frmAddVenue : Form, Venue
{
    public frmAddVenue()
    {
        InitializeComponent();
    }

    public int VenueID
    {
        get => int.TryParse(txtVenueID.Text, out var id) ? id : 0;
        set => txtVenueID.Text = value.ToString();
    }

    public string VenueName
    {
        get => txtVenueName.Text;
        set => txtVenueName.Text = value;
    }

    public string VenueAddress1
    {
        get => txtAddress1.Text;
        set => txtAddress1.Text = value;
    }

    // 按相同逻辑实现剩余的Venue接口属性
    // VenueAddress2、City、County、Eircode、Capacity、PhoneNo、Fee、Status
}

frmUpdateVenue的实现方式完全一致,只需对应自身的控件完成属性绑定。

2. 通过Venue接口统一访问属性

不再用Form类型声明变量,改用Venue接口类型,这样不管是新增还是修改表单,都能通过接口统一访问所有属性:

// 新增场景
Venue venueDetails = new frmAddVenue();
// 读取属性
string venueName = venueDetails.VenueName;
// 设置属性
venueDetails.Capacity = 1000;

// 修改场景,直接替换实例即可
venueDetails = new frmUpdateVenue();
venueDetails.VenueID = 456;
string city = venueDetails.City;

3. 解决之前的控件访问问题

之前尝试继承VenueModel无法访问控件,是因为单独的VenueModel子类和表单控件属于不同实例,无法直接访问表单控件。而让表单类自身实现Venue接口,属性的get/set逻辑就在表单类内部,自然能直接访问到自身的控件实例,不存在跨实例访问的问题。

内容的提问来源于stack exchange,提问作者Keelan McCarthy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.21 17:36:11