none
form繼承與imagelist的問題 RRS feed

  • 問題

  • 使用visual Studio 2005, C# WinForm

    1. 我產生了一個form1,上頭放了一個imagelist,
    2. 對imagelist add一個圖示 ,也放了一個button使用此一圖示,form與imagelist可視層級有設成protected
    3. 產生了form2,繼承自form1
    4. 對form2置放一個button,double click讓他自動產生click事件
    5. 此時程式也會在form2的designer加入如下的code

       // imageList1
       //
       this.imageList1.ImageStream = ((System.Windows.Forms.ImageListStreamer)(resources.GetObject("imageList1.ImageStream")));
       this.imageList1.Images.SetKeyName(0, "Angel Skype.png");

    就是這幾行code讓我很頭大,因為若是我回頭對form1的imagelist增加第二個圖示時,form2並不會知道有第二個圖示的存在! 我必需手動去刪除繼承form上的這些code,讓他自己重產生一次! 但我有很多表單了

    而我的問題是

    1.我除了手動去刪除外~有更好的解決方式嗎? 或是怎麼做日後可以避免!

    2.在繼承的行為下~form2為什麼要再去add那些code呢?

     

    • 已移動 璉璉 2009年10月10日 上午 01:58 (從:Visual Studio一般討論區(General))
    2006年9月12日 下午 01:53

解答

  • HI Bert Yu:

    一、第一點我可能誤解您的意思了,我以為您是在專案中直接新增一個UserControl,這樣的方式是不能直接拖拉到畫面上,但是您的方式是引用參考的方式,所以可以。

    二、如果依照參考的模式,在引用時,是不是因為來源端更新,但是參考卻未更新所引發的問題?如果不是我猜的的那樣,看來VS2005還是建議進廠修復。Orz ....其實我的VS2005也有問題中,只是目前沒用到,懶得修復。

    • 已標示為解答 璉璉 2009年10月10日 上午 01:58
    2006年9月14日 上午 04:45
    版主

所有回覆

  • 建議:

    如果把imageList用UserControl來呈現,這樣不知道可不可行?

    只要修改UserControl,其使用的Form都會一起修改到。

    2006年9月13日 上午 03:37
    版主
  • 這樣子的行為更慘

    我放了一個usercontrol.裡頭只包含一個imagelist.加了一個圖示! 放了一個button使用這個圖示!

    裝usercontrol拉到form中,重編了專案!

    要將usercontrol拉入form中..即出現錯訊~~內容大略是"imagelist  .... index out of bound"..

    以為是我的問題..刪掉再重做一次..這回拉的上去...但form再也打不開了--錯訊跟剛才不同..如下

    出現

    變數名稱 'userControl21' 尚未宣告或沒有指派。
    於 System.ComponentModel.Design.Serialization.CodeDomSerializerBase.Error(IDesignerSerializationManager manager, String exceptionText, String helpLink)
    於 System.ComponentModel.Design.Serialization.CodeDomSerializerBase.DeserializeExpression(IDesignerSerializationManager manager, String name, CodeExpression expression)
    於 System.ComponentModel.Design.Serialization.CodeDomSerializerBase.DeserializeExpression(IDesignerSerializationManager manager, String name, CodeExpression expression)
    於 System.ComponentModel.Design.Serialization.CodeDomSerializerBase.DeserializeStatement(IDesignerSerializationManager manager, CodeStatement statement)
     
     
    且就算可行~這樣子的控制方式也跟原先以繼承而控制的方式不同!  

    2006年9月13日 上午 11:50
  • 我加都是用程式加,我記得不能拖拉吧...還是我記錯了。 

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
            Dim ss As New UserControl1
            Me.Controls.Add(ss)

            Dim pp = ss.ImageList1.Images.Count 

        End Sub

    2006年9月13日 下午 02:02
    版主
  • To LOLOTA:

    先謝謝您。但我不太明白您指的"我記得不能拖拉吧"指的是usercontrol嗎? 我usercontrol一直都是從toolbox拉進來的耶!這樣子用沒問題啊!

    且我又順便做了一個實驗!

    當我usercontrol上放上imagelist時(不加任何icon),不管我怎麼玩都不會出錯,但當我加上任一個點示時,剛才design好的form馬上就會出現如上的錯訊!這是我vs的問題嗎?

    從最原始的問題到使用usercontrol都覺得怪怪的!

    2006年9月13日 下午 05:10
  • HI Bert Yu:

    一、第一點我可能誤解您的意思了,我以為您是在專案中直接新增一個UserControl,這樣的方式是不能直接拖拉到畫面上,但是您的方式是引用參考的方式,所以可以。

    二、如果依照參考的模式,在引用時,是不是因為來源端更新,但是參考卻未更新所引發的問題?如果不是我猜的的那樣,看來VS2005還是建議進廠修復。Orz ....其實我的VS2005也有問題中,只是目前沒用到,懶得修復。

    • 已標示為解答 璉璉 2009年10月10日 上午 01:58
    2006年9月14日 上午 04:45
    版主