2011-07-14 53 views
3

可以說我有FormChild繼承FormParent。在父母的頂端有一個工具。我想要的是在我的子表單中添加額外的元素,但控件始終被鎖定,儘管我已將修改器設置爲保護WinForms ToolStrip在視覺繼承中不可用

我查了一下互聯網,看來這是一個衆所周知的bug;但沒有人知道解決方法或什麼?

+0

你在哪裏看到這個列爲「已知的錯誤」?你在說[這個錯誤報告](https://connect.microsoft.com/VisualStudio/feedback/details/114535/visual-inheritance-is-not-supported-by-some-new-controls)嗎?解決方案是以編程方式進行修改,而不是通過Designer。似乎很簡單;將您的代碼添加到派生窗體的構造函數中。 –

+0

是的,這是確切的錯誤,但我只是想知道如果任何人有Visual Studio設計器的解決方案?我知道我可以通過編程方式訪問toolstip –

+1

我不這麼認爲。正如Connect頁面所示,您需要爲ToolStrip編寫您自己的定製設計器(幾乎不推薦;這是踩入一些非法文檔的水域),或者只是以編程方式進行更改。不過,我不確定用代碼做這件事有什麼缺點。設計師的目的是爲開發者提供幫助,但是我發現有太多的人在開始困惑時猶豫不決。 –

回答

-1

您可以像這樣將工具條傳遞給子表單。

public partial class ChildForm : Form 
{ 
    private readonly ToolStrip parentToolStrip; 

    public ChildForm(ToolStrip strip) 
    { 
     parentToolStrip = strip; 
    } 
} 

請注意,上面的代碼語法可能是錯誤的,我知道該控件的名稱是不再那麼只是ToolStrip的,我只是作爲演示向您展示的概念。

+0

您能否擴展一下這應該如何解決問題?我的工具欄是在父級中聲明的,由設計人員操縱。當子窗體繼承父窗體時,它也得到這個工具窗體控件;但問題出現在VS設計器中,它不允許在形式繼承場景中更改工具條(對於所有其他控件,因爲我知道它工作正常)。 –

+0

您的子表單如何繼承父級。你可以粘貼代碼,所以我可以看到請。 – Jethro

3

那麼你可以手動編輯FormChild.Designer.cs文件。在那裏你可以訪問繼承的工具條。

編輯:

  1. 加入這個類:

    //System.Design.dll required 
    [Designer(typeof(System.Windows.Forms.Design.ControlDesigner))] 
    public class InheritableToolStrip : ToolStrip { } 
    
  2. 編制項目

  3. 使用InheritableToolStrip從工具箱添加到FormParent。
  4. 將要修改的屬性更改爲受保護的。
  5. 將項目添加到FormChild中的繼承工具欄。

你應該能夠在設計器中設計控制。嘗試了一下 - 看起來像是有效的。

P.s. Iam使用VS2010,.NET v4

+0

但設計師會覆蓋更改,對吧? –

+0

問題不在於以編程方式操縱工具條 –

+3

是的,設計師將覆蓋這些更改。您應該*永遠不要手動編輯'Designer.cs'文件。 –

0

微軟已經鎖定了複雜控件的Visual Inheritance,因爲他們無法弄清楚如何以簡單的方式管理繼承樹上的子項控件的設計器序列化。

一個簡單的解決方法(達到相同的效果)是在子表單上放置一個不可見的工具條,並在加載時將其與基表單工具條合併。

I've developed MergableToolStrip controls you can use free of charge here

+1

歡迎來到Stack Overflow!感謝您發佈您的答案!請務必仔細閱讀[自助推廣常見問題](http://stackoverflow.com/faq#promotion),僅供參考。 –