2

私はしばらくの間これと戦ってきました、そして私はいくつかの指導が必要です。

ASP.NET4.0WEBFORMSでコーディングしています。

質問は次のとおりです。テキストボックス、ラベル、またはその他のコントロールを別のクラスに公開する方法。

私はウェブフォームを持っています(下記参照)。

public partial class WebForm1 : System.Web.UI.Page
{

}

次に、これが参照され、別のクラスに送信されます。

public class SearchInitializer
{
    private WebForm1 _webform1;

    public SearchInitializer(WebForm1 Webform1)
    {
        _webform1 = Webform1;
    }

    public void ChewSettings()
    {

        _webform1 //can't find any control in here?!
    }

}

最初に、新しいクラスに送信した参照からアクセスできると思ったパブリックプロパティを作成することを考えました。

public partial class WebForm1 : System.Web.UI.Page
{
   public string KeywordBox1 
    {
        get {return txt_keyword.Text;}
        set {txt_keyword.Text = value;}
    }

}

Webフォームを他のクラスに継承しようとしました。プロパティを利用可能にしますが、そこには運がありません。

public class SearchInitializer : Webform1
{
    private WebForm1 _webform1;

    public SearchInitializer(WebForm1 Webform1)
    {
        _webform1 = Webform1;
    }

    public void ChewSettings()
    {

        _webform1 //can't find any control in here?!
    }

}

さて、ここでは抽象クラスの移行が役立ち、すべてを継承します。しかし、私はそれを間違えたと思います。私はイベントと静的クラスを持っているので、それらはページと話すことができます。しかし、コントロールにすべての情報を保存するためのコンテナーとして静的クラスを使用したくないのです。これらは私が試した例ですが、すべて失敗しました。だから、これは基本的に私が知っていることを拡大しようとしている私です;)読んでくれてありがとう!! なぜ彼らは失敗したのですか、そして私はそれをどのようにすべきですか?

必要に応じて編集してください!

public partial class WebForm1 : System.Web.UI.Page
{

     protected void btn_click(object sender, EventArgs e)
     {
         SearchInitializer searchIni = new SearchInitializer(this);
     }

}
4

3 に答える 3

5

コントロールを公開するには、2 つの方法が考えられます。

ファイルから次のステートメントを削除しmyPage.designer.cs、パブリック宣言としてコード ビハインドに配置できます。

protected global::System.Web.UI.WebControls.TextBox myTextBox;

になる

public System.Web.UI.WebControls.TextBox myTextBox;

これにより、すぐにアクセスできるようになります。私の好みの方法は、アクセスを提供したい特定のコントロールごとにプロパティを追加することです。

public System.Web.UI.WebControls.TextBox MyTextBoxElement
{
    get
    {
        return myTextBox;
    }
}

これにより、必要に応じて補助的なアクセス制御やその他の条件を提供できます。いずれの場合でも、フィールドまたはプロパティにアクセスするには、使用するオブジェクトが特定のページ タイプでこれを参照する必要があります。

于 2012-12-10T13:14:55.433 に答える
2

何をしようとしているのかわかりませんが、継承されたcals内のクラスにアクセスするには、インスタンスを宣言するのではなく、キーワードbaseを使用する必要があります。base

public partial class WebForm1 : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {

    }

    public string KeywordBox1
    {
        get { return txt_keyword.Text; }
        set { txt_keyword.Text = value; }
    }
}

public class SearchInitializer : WebForm1
{
    public SearchInitializer()
    {
    }

    public void ChewSettings()
    {
        // Works
        base.KeywordBox1 = "Red";
    }
}

インテリセンスがプロパティを表示しない場合は、ソリューションを再構築してみてください。次に、使用可能なプロパティのリストが更新され、表示されます。

于 2012-12-10T12:51:19.953 に答える
2

オリジナルのアプローチがうまくいくはずです。テキスト ボックスとSearchInitializerクラスを含むフォームを使用して小さなテスト プロジェクトを作成し、それが機能することを確認してから、現在のプロジェクトの違いを理解することをお勧めします。

于 2012-12-10T13:35:42.417 に答える