各位好,
同一個解決方案中,有兩個專案,一般是MainFrm專案中調ClassLibrary1中的類功能(數值相加等); 如果想在ClassLibrary1中去控制MainFrm中界面的控制元件(比如列印資訊在Listbox控制元件中),用委托是怎么實作啊?
uj5u.com熱心網友回復:
網上不是一堆么https://www.cnblogs.com/sjqq/p/6917497.html
uj5u.com熱心網友回復:
首先說一下,一個界面端去呼叫一個類別庫,是正常的。
但是一個類別庫,要緊耦合的呼叫界面,是不正常的。
然后說一下方法。
其實你傳遞一個控制元件物件就好了,不需要委托
uj5u.com熱心網友回復:
你始終呼叫的是類別庫下面的類, 是類就有方法,有方法就有回傳值,你在MainForm中判斷拿到回傳值之后 如果回傳1,你執行列印不就好了么?uj5u.com熱心網友回復:
這就叫回圈參考了,應該反過來思考你的思路是不是有問題.千萬別往下走.uj5u.com熱心網友回復:
是的,傳控制元件物件是最好的方法。如果想用委托怎么實作好啊?
uj5u.com熱心網友回復:
如果類中方法里執行的內容比較多,想要列印詳細的程序,通過回傳值不好。
uj5u.com熱心網友回復:
你需要將資訊顯示到ListBox,那就有一個動作叫“輸出到ListBox”,這個動作不應該在類中進行,因為有可能因為ListBox的顯示效果不好而換成了輸出到RichTextBox。那就得改到類中去。如果列印的動在UI上進行,而類只負責輸出需要列印的資訊,那就可以在UI上隨意換資訊的處理方式。
可以再類中定義一個事件,事件只拋出需要“列印”的資訊,然后UI來訂閱這個事件。
當UI收到事件發生的資訊,接下來你想咋處理都行
uj5u.com熱心網友回復:
class A
{
public Action Act;
void Do()
{
Act();
}
}
class Form2 : Form
{
public void M()
{
A a = new A();
a.Act = () =>
{
this.label1.Text = "aaa";
};
}
}
uj5u.com熱心網友回復:
這個對,樓主本身思路也對。
反而樓上說傳遞控制元件,說回圈參考都是錯。
一句話,別把自己當神仙,你知道別人怎么用么? 不知道請交給外面的人自己處理。
傳遞控制元件?你知道他給你傳遞什么。我給你傳遞個CEF Broswer,此時你知道外面的人到底想怎么弄??
回圈參考,對方自己做的事情,不存在回圈參考。 fan委托執行權交換回去了,他還是在他的地盤上做,沒讓你參考
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/242627.html
標籤:C#
