簡體   English   中英

如何在子例程的參數中傳遞用戶控件和用戶控件的屬性

[英]How to pass a user control and a property of a usercontrol in the parameters of a subroutine

我在c#winform中引入了一些用戶控件,基本上我一次又一次地做同樣的事情。 每次我在主窗體上單擊一個按鈕時,都會看到一個用戶控件,它會調用該用戶控件的一個屬性,如果可見,則它會調用該用戶控件的一個不同屬性,因為基本上不管是否可見哪個用戶控件,單擊按鈕都會發生相同的代碼,我想節省代碼空間,並創建一個子例程,該子例程實質上執行相同的操作,只是每個用戶控件使用不同的用戶控件和用戶控件屬性,因此我想喜歡像這樣子程序的參數

private void DoSomething(UserControl usercontrol, UserControlProperty property)
{
    usercontrol.property
}

DoSomething(Products, Products.Fill);

我想做這樣的事情,盡管我不知道是否可以訪問用戶控件以及用戶控件中的屬性,然后將它們作為參數傳遞給子例程

Button1_Click(object sender, eventargs e)
{
    UserControlDoSomething(usercontrol1, usercontrol1.FillDatagridview);
    UserControlDoSomething(usercontrol2, usercontrol2.FillDatagridview0;
}

UserControlDoSomething(UserControl u, ????)
{
    u.backcolor = red;
    u.property();
}

我不知道如何在參數中放置用戶控件的屬性

希望有人可以幫助

您可以傳入Action類型的委托-然后在需要的情況下執行此Action ,前提是您的方法簽名匹配。

public void DoSomething(UserControl control,Action callback)
{
    control.SomeProperty = 1;
    callback();
}

DoSomething(usercontrol,usercontrol.MethodWithNoArgs);

要么

   DoSomething(usercontrol,()=>
{
    //do some stuff in here
    usercontrol.Method(123);
    //some more stuff
});

如果您知道屬性的名稱(我猜是這種情況),則可以使用反射來訪問它: http : //msdn.microsoft.com/zh-cn/library/vstudio/ms173183.aspx ,因此您可以傳遞僅字符串作為參數。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM