私はそれを文字列として渡したいと思います。ありがとう!リファレンスのUserControlクラスベースオフ文字列値
答えて
ヒント:
あなたはあなたの方法にのSystem.Typeを渡す必要があります...
あなたはObject.GetType()ともtypeof演算子を使用する必要があります。
Webフォーム
<h2>Passing Types</h2>
<asp:Panel runat="server" ID="pnl1">
<p>
<asp:TextBox runat="server" ID="txt1" />
</p>
<p>
<asp:DropDownList runat="server" ID="ddl1" />
</p>
<p>
<asp:HyperLink runat="server" ID="hl1" Text="Link1" NavigateUrl="http://www.google.co.uk" Target="_blank" />
</p>
</div>
<asp:Label runat="server" ID="lout" />
<div>
<p>
<asp:DropDownList runat="server" ID="ddlTypes">
</asp:DropDownList>
<asp:Button runat="server" ID="btnGetValueFromType" Text="Get Value By Control Type" onclick="btnGetValueFromType_Click" />
</p>
</asp:Panel>
:あなたはまた、その現在実行中のアセンブリまたは下記
AssemblyQualifiedName
基本的な考え方であればその修飾名を使用して、クラスのタイプのインスタンスを作成することができます
CodeBehind (謝罪、私がして以来ずっとずっとでした。 VB.net ので、この例では、 C#のである)
protected void Page_Load(object sender, EventArgs e)
{
if (! IsPostBack){
buildGui();
}
}
private void buildGui(){
List<string> lstStrings = new List<string>(5);
lstStrings.Add("one");
lstStrings.Add("two");
lstStrings.Add("three");
lstStrings.Add("four");
lstStrings.Add("five");
ddl1.DataSource = lstStrings;
ddl1.DataBind();
//Populate the Types Dropdown with some fullyqualified type names (includes the assembly name,version number, PublicKey etc.)
Dictionary<string, string> lstTypes = new Dictionary<string, string>(3);
lstTypes.Add(this.ddl1.GetType().Name, this.ddl1.GetType().AssemblyQualifiedName);
lstTypes.Add(this.txt1.GetType().Name, this.txt1.GetType().AssemblyQualifiedName);
lstTypes.Add(this.hl1.GetType().Name, this.hl1.GetType().AssemblyQualifiedName);
//lstTypes.Add(this.hl1.GetType().Name, this.hl1.GetType().AssemblyQualifiedName);
lstTypes.Add(this.CRJunk01.GetType().Name, this.CRJunk01.GetType().AssemblyQualifiedName);
ddlTypes.DataSource = lstTypes;
ddlTypes.DataValueField = "value";
ddlTypes.DataTextField = "key";
ddlTypes.DataBind();
}
protected void btnGetValueFromType_Click(object sender, EventArgs e)
{
Type t = Type.GetType(ddlTypes.SelectedValue);
lout.Text = "Looking for a type: " + t.ToString();
foreach(Control c in this.pnl1.Controls){
if (c.GetType().Equals(Type.GetType(ddlTypes.SelectedValue)))//Look for controls whose type is the same as the type selected in ddl1.
{
lout.Text += string.Format("<br/>Got Control of type: {0}", c.GetType().Name);
//Cast to your custom Interface/BaseClass and extract the value.
lout.Text += "<br/>Value is: " + ((ICrJunkControl)(c)).ControlValue;
}
}
}
これは、おそらく「レバレッジ」する必要がありますものの一種です。
最後の注意点は、すべてのカスタムコントロールが基本クラスまたはインターフェイスから継承されている場合に最適です。こうすることで、オブジェクトのタイプに基づいてオブジェクトを配置したときに、そのオブジェクトをインターフェイスまたはベースクラスにキャストしてから、別の共有メンバーの値を取得できます。 ControlValue
。基本クラスの実装はこれをオーバーライドします。これは、異なるメンバーが自分の状態を公開する異種のコントロールに関連する問題を克服するのに役立ちます。
テキストボックス - >テキスト
のDropDownList - > SelectedValueの
ハイパーリンク - >テキスト/ NavigateUrl
HTH、
インターフェイスを使用して、ユーザーコントロール上でそれを実装。その後、ユーザーコントロールをインターフェイスにキャストし、すべての共通のプロパティとメソッドを利用できます。
Public Interface ucInterface
Property textbox() As String
Function calculate() As Double
End Interface
Public Class UserControl_appName
Inherits System.Web.UI.UserControl
Implements ucInterface
Public Function calculate() As Double Implements ucInterface.calculate
Return 99/10
End Function
Public Property textbox() As String Implements ucInterface.textbox
Get
Return txtBox.text
End Get
Set(ByVal value As String)
txtBox.text = value
End Set
End Property
End Class
Public Class Test
Public Sub Test()
Dim ucAppName As ucInterface = CType(Parent.FindControl(strucParam(i).ParentFindControl), ucInterface)
ucAppName.textbox = "Test 1"
ucAppName.calculate()
End Sub
End Class
私が投稿したコードは、UserControlボタンのナビゲーションにあります。それをUC_Bとしましょう。ユーザーがボタンをクリックすると、複数のUserControls(UC_Aで検索されたこれらのUserControslの1つを呼び出す)を検索し、txtFirstNameなどのWebControlsにアクセスします。私はWebControlsの名前とコントロールに関する他の追加情報を知っている構造を持っています。 UC_A、UC_B、...、UC_Zは私のAccountInfo.aspxページに表示されます。私はUserControlsの任意の組み合わせを持つことができます。だから私はInterfaceがこの場合にはうまくいくとは思わない? – crjunk
システムをチェックアウトします。また、他のアセンブリから、または参照されたライブラリからオブジェクトを取得することもできます。もちろん、これが機能するには、このコードが「オブジェクト」への参照を返すことを覚えておく必要があります。すべてのコントロールの共通実装を無効にするインタフェースを定義するか、型判定の別の手段のいずれかを定義することもできます。
Imports System.Reflection
Public Class ObjectFactory
Public Shared Function NamedObject(ByVal ObjectName As String) As Object
Dim Assem = [Assembly].GetExecutingAssembly()
Dim MyType As Type = Assem.GetType(ObjectName.Trim)
Dim MyObject As Object = Nothing
Try
MyObject = Activator.CreateInstance(MyType)
Catch MyProblem As TargetInvocationException
MessageBox.Show(MyProblem.ToString)
End Try
Return MyObject
End Function
エンドクラス
- 1. 文字列値
- 2. 文字列値(テキスト)
- 3. 文字列の値と列挙型の文字列値の比較
- 4. sfValidatorの値==文字列
- 5. 文字列値のjava.lang.NumberFormatException
- 6. C++の文字列の値が別の文字列の名前
- 7. C++関数はNULL文字列リファレンスを返します
- 8. 文字列の目的の文字列に値を渡す
- 9. 配列の文字列の値を
- 10. TreeMapのキー値を文字列配列
- 11. userControlを文字列にロードしてフォームを
- 12. キャスト文字列値は
- 13. Oreillyサーブレット文字列値manupulation
- 14. フォーマット数値文字列は
- 15. 文字列/ txtファイル内の文字列を置換する文字と数値に値を設定する
- 16. Javascriptを列挙文字列値
- 17. 文字列値をXmlの文字列配列に比較して返すAndroid
- 18. Ajaxレスポンスの文字列値の区切り文字
- 19. ストライピング文字列私はタイプの文字列から数値を抽出したい文字列 ストライピングの
- 20. プロローグ内の文字列の値
- 21. Rubyの文字列をデフォルト値の
- 22. ブール値の文字列の操作
- 23. 文字列内の値のテスト
- 24. のTrace.Write(文字列、文字列)とTrace.WriteLine(文字列、文字列)カテゴリ
- 25. (文字、文字列、文字と数字)に変換するHEX値に
- 26. ブースト・スピリット:値ペアの文字列をマップ<文字列、文字列>に変換する方法
- 27. 文字列とregExワイルドカード値の比較
- 28. 文字列とオプション値の比較
- 29. 文字列と数値の比較 - Python
- 30. テキスト文字列からの合計値
こんにちは、あなたが長期的にやろうとしていますか?ユーザーコントロールを動的に読み込みますか? – WraithNath
No.私はこれを使用して、Webコントロール(txtboxやドロップダウンなど)を参照してから、その値をSQLパラメータに渡すことができます。私はこのコードに渡す必要がある複数のUserControlsを持っているので、私はハードコードされたものを持っていることを望んでいません。私はほとんど終わっている...これは私が残したパズルの最後の部分であるようだ。 – crjunk
'strucParam'とは何ですか?' ParentFindControl'とは何ですか? –