2

TextBox から継承するサーバー コントロールを作成しようとしています。このコントロールには、CalendarExtenderが自動的にアタッチされます。これを行うことは可能ですか、それとも私の新しいコントロールは代わりに CompositeControl から継承する必要がありますか? 私は前者を試しましたが、コントロール ライフサイクルのどの部分で CalendarExtender の新しいインスタンスを作成する必要があるか、どのコントロール コレクションに追加する必要があるかが明確ではありません。それを Page または Form のコントロール コレクションに追加できないようです。(TextBox) コントロールのコレクションに追加すると、ポップアップ カレンダー機能がまったく利用できなくなります。

4

4 に答える 4

2

私はしばらく前にプロジェクトでこれを達成しました。そのために、TextBox と CalendarExtender の両方を含む CompositeControl を作成しました。

CompositeControlのCreateChildControlsメソッドでは、次のようなコードを使用します。

TextBox textbox = new TextBox();
textbox.ID = this.ID + "Textbox";
textbox.Text = this.EditableField.TextValue;
textbox.TextChanged += new EventHandler(HandleTextboxTextChanged);
textbox.Width = new Unit(100, UnitType.Pixel);
CalendarExtender calExender = new CalendarExtender();
calExender.PopupButtonID = "Image1";
calExender.TargetControlID = textbox.ID;
this.Controls.Add(textbox);
this.Controls.Add(calExender);

もちろん、この CompositeControl を含むフォームにツールキット スクリプト マネージャがあることを確認してください。

于 2008-09-17T14:40:33.767 に答える
1

カスタム サーバー コントロールに ajax カレンダーを簡単に追加できます。アプリケーションに 2 つの参照を追加する必要があります。1. AjaxControlToolkit.dll 2. System.Web.Extensions 2 番目の参照を使用して、カスタム サーバー コントロールの「CalendarExtender」のすべてのプロパティを取得します。

于 2011-11-07T08:53:22.767 に答える
1

これは古いスレッドであることは知っていますが、同様の質問をしたときに見つけました。これは私が最終的に実装したものであり、うまく機能します。コントロールを TextBox にしたい場合は、Render の呼び出し中にエクステンダーをポンピングするだけです。

Imports System.Web.UI.WebControls
Imports AjaxControlToolkit

Public Class DateTextBox
    Inherits TextBox

    Private _dateValidator As CompareValidator
    Private _calendarExtender As CalendarExtender

    Protected Overrides Sub OnInit(ByVal e As System.EventArgs)
        MyBase.OnInit(e)

        _dateValidator = New CompareValidator
        With _dateValidator
            .ControlToValidate = ID
            Rem set your other properties
        End With
        Controls.Add(_dateValidator)

        _calendarExtender = New CalendarExtender
        With _calendarExtender
            .TargetControlID = ID
        End With
        Controls.Add(_calendarExtender)
    End Sub

    Protected Overrides Sub Render(ByVal writer As System.Web.UI.HtmlTextWriter)
        MyBase.Render(writer)
        _dateValidator.RenderControl(writer)
        _calendarExtender.RenderControl(writer)
    End Sub
End Class
于 2010-02-12T20:07:07.803 に答える
0

ユーザーがテキストボックスに何も入力できないようにし、カレンダーエクステンダーでのみ入力できるようにしてから、テキストボックスコントロールから選択した日付を取得しようとすると、textboxプロパティをReadOnlyに設定している場合、空の文字列になる可能性があります。 ="真"。

これは、読み取り専用コントロールがサーバーにポストバックされないためです。この回避策は次のとおりです。

保護されたvoidPage_Load(オブジェクト送信者、EventArgs e)

{{

TextBox1.Attributes.Add( "readonly"、 "readonly");

}

それが役に立てば幸い。

于 2012-02-20T10:03:43.510 に答える