1

私はいくつかの問題を抱えていますが、今私はそれを解決する方法がわかりません。ウェブコントロールは、毎秒ラベルによって表される時計を単に更新するだけである。私の問題は、Webコントロールが「Formato」というプロパティを公開しているため、ユーザーは12時間または24時間の形式で表示することができます。ASP.NETカスタムWebコントロール

namespace Ejercicio2RelojControl 
{ 
public enum _FormatoHora 
{ 
    Doce, 
    Veinticuatro 
} 

[DefaultProperty("FormatoHora")] 
[ToolboxData("<{0}:Ejercicio2RelojControl runat=server></{0}:Ejercicio2RelojControl>")] 
[ToolboxBitmap(typeof(Ejercicio2RelojControl), "Ejercicio2RelojControl.Ejercicio2RelojControl.ico")] 
//[Designer("Ejercicio2RelojControl.Ejercicio2RelojControlDesigner, Ejercicio2RelojControl")] 
public class Ejercicio2RelojControl : WebControl 
{ 
    public Ejercicio2RelojControl() 
    {      
    } 


    [ 
    //Bindable(true), 
    Category("Appearance"), 
    //DefaultValue(_FormatoHora.Doce), 
    Description(""), 
    ] 

    public virtual _FormatoHora FormatoHora   
    { 
     get 
     {     
      //object t = ViewState["FormatoHora"];     
      //return (t == null) ? _FormatoHora.Doce : (_FormatoHora)t; 
      object obj2 = this.ViewState["_FormatoHora"]; 
      if (obj2 != null) 
      { 
       return (_FormatoHora)obj2; 
      } 
      return _FormatoHora.Doce; 
     } 
     set 
     {     
      ViewState["_FormatoHora"] = value; 
     } 
    } 

    //Create one TimerControl 
    Timer timer = new Timer(); 


    private Label clockLabel = new Label();   


    // Declare one Updatepanel 
    UpdatePanel updatePanel = new UpdatePanel(); 

    // Now override the Load event of Current Web Control 
    protected override void OnLoad(EventArgs e) 
    {       
     //Text = "hh:mm:ss"; 
     // Create Ids for Control 
     timer.ID = ID + "_tiker";    
     clockLabel.ID = ID + "_l";    
     // get the contentTemplate Control Instance 
     Control controlContainer = updatePanel.ContentTemplateContainer; 
     // add Label and timer control in Update Panel 
     controlContainer.Controls.Add(clockLabel);    
     controlContainer.Controls.Add(timer);  


     // Add control Trigger in update panel on Tick Event 
     updatePanel.Triggers.Add(new AsyncPostBackTrigger() { ControlID = timer.ID, EventName = "Tick" }); 
     updatePanel.ChildrenAsTriggers = true; 
     // Set default clock time in label 
     clockLabel.Text = DateTime.Now.ToString("h:mm:ss tt"); 
     //clockLabel.Text = DateTime.Now.ToString("H:mm:ss");    

     // Set Interval 
     timer.Interval = 1000; 
     // Add handler to timer 
     timer.Tick += new EventHandler<EventArgs>(timer_Tick); 

     updatePanel.RenderMode = UpdatePanelRenderMode.Block; 
     //Add update panel to the base control collection. 
     base.Controls.Add(updatePanel); 
    } 

    protected override void RenderContents(HtmlTextWriter output) 
    { 
     output.Write(FormatoHora); 
    } 

    void timer_Tick(object sender, EventArgs e) 
    { 
     // Set current date time in label to move current at each Tick Event 
     clockLabel.Text = DateTime.Now.ToString("h:mm:ss tt"); 
     //clockLabel.Text = DateTime.Now.ToString("H:mm:ss");     
    } 

} 

}

今ではASPでカスタムコントロールをテストする時間だ:これはスペイン語DOCEで12を意味し、Veinticuatroこれは、サーバーコントロールのコードである24を意味列挙型で行われています.net Webアプリケーション。

<cc1:Ejercicio2RelojControl ID="Ejercicio2RelojControl1" runat="server" />  

素晴らしい作品!私はプロパティを追加するときには "フォーマトは、" コンパイル時に失敗します。

<cc1:Ejercicio2RelojControl ID="Ejercicio2RelojControl1" runat="server" Formato="Doce" /> 

コンパイラエラーメッセージ:CS0117: 'Ejercicio2RelojControl.Ejercicio2RelojControlは' 'FormatoHora'の定義が含まれていません。

コンパイル時にFormatoがWebアプリケーションをクラッシュさせる理由は何ですか?

ありがとうございます。

EDIT:

名前空間Ejercicio2RelojControl { パブリック列挙FormatoHora { DOCE、 Veinticuatro}私はパブリックプロパティを変更したあなたが見ることができるように

[DefaultProperty("FormatoHora")] 
[ToolboxData("<{0}:Ejercicio2RelojControl runat=server></{0}:Ejercicio2RelojControl>")] 

public class Ejercicio2RelojControl : WebControl, INamingContainer 
{ 

    public FormatoHora FormatoHora 
    { 
     get 
     {     
      object obj2 = this.ViewState["FormatoHora"]; 
      if (obj2 != null) 
      { 
       return (FormatoHora)obj2; 
      } 
      return FormatoHora.Doce; 
     } 
     set 
     { 
      ViewState["FormatoHora"] = value; 
     }    
    } 

。今、エラーが変更されました。

コンパイラエラーメッセージ:CS0120:オブジェクト参照が非静的フィールド、メソッド、またはプロパティ感謝「Ejercicio2RelojControl.Ejercicio2RelojControl.FormatoHora.get」

すべてのヘルプのために必要とされる次の通りです。おかげ

EDIT 2:

私はこの問題は、{}のセットであることを発見しました。私がコメントすれば、すべてうまくいきますが、get {}しか実装されていないために読み込み専用であるため、FormatoHoraを12と24の間で変更することはできません。 set {}の実装に関する助け?

+1

何かが同期していません。Webコントロールが 'Formato'というプロパティを公開しているとしますが、コードサンプルのプロパティが' FormatoHora'で、カスタムコントロールサンプルに 'Formato'を設定していて、' FormatoHora'が存在しないというエラーメッセージが表示されます。どちらですか? – mellamokb

+0

カスタムコントロールを少し編集しました。 – user354427

+0

私は問題がセット{}にあることを発見しました。私がコメントすれば、すべてうまくいきますが、get {}しか実装されていないために読み込み専用であるため、FormatoHoraを12と24の間で変更することはできません。 set {}の実装に関する助け? – user354427

答えて

1

私はあなたに解決策を与えるためにここにいます: 名前空間とWebコントロール(Ejercicio2RelojControl)に同じ名前を使用しています。単にそれを変更すれば、コードは正常に動作します。

実際に数年が経過しているにもかかわらず、役立つことを願っています。

関連する問題