0

編集:VisualStudioの問題のようです。Visual Studioを再起動すると、ソリューションを再構築するまで機能します。

このコードを使用すると、デザイナーで「プロパティ「MyMode」に「B」を設定できませんでした」という例外が発生します。

public class MyControl : CompositeControl
{
  public enum MyEnum{ A, B }

  [DefaultValue(MyEnum.A)]
  public MyEnum MyMode
  {
    get
    {
      object obj = ViewState["MyMode"];
      return obj == null ? MyMode.A : (MyEnum)obj;
    }

    set
    {
      ViewState["MyMode"] = value;
    }
  }
}

再現するには:プロジェクトにコントロールを作成します。コントロールを別のプロジェクトのWebフォームにドラッグします。プロパティウィンドウでMyMode=Bを設定します。フォームを閉じて、デザイナーを再度開きます。

私は何が間違っているのですか?文字列を手動で列挙型に解析する必要がありますか?

編集:デザイナーが生成したコード。

<cc1:MyControl ID="MyControl1" runat="server" MyMode="B"  />

編集:実際、このプロパティも失敗します:

  public MyEnum MyMode
  {
    get
    {
      return MyEnum.A;
    }    
    set{}
  }
4

2 に答える 2

0

値を文字列である「B」に設定しようとしています。列挙型は数値であるため、数値に設定する必要があります。

...
set
{
  ViewState["MyMode"] = value; // <-- 'value' must be an integer equivalent to B
  // in this example, to set as 'B', 'value' == 1
}
...

編集この記事を参照してください

于 2009-11-19T19:53:36.570 に答える
0

これはVisualStudio2008SP1のバグです

https://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=361826

http://support.microsoft.com/kb/961847で説明されているように、実際には2つの修正プログラムがリリースされていることに注意してください。

1つはWindowsXPおよび2009用で、もう1つはWindowsVistaおよびWindowsServer2008用です。

Windows XPおよび2003: http ://support.microsoft.com/kb/969612/

WindowsVistaおよびWindowsServer2008: http ://support.microsoft.com/kb/967535/

于 2009-11-19T20:44:32.833 に答える