• ベストアンサー

VB.net Webアプリケーションでのユーザーコントロール(DLL)の作り方

VB.netでWebアプリケーションでのユーザーコントロール(DLL)を試しに作ったのですが(テキストボックスを張り付けただけのもの)、WebアプリケーションにそのDLLを張り付けてもテキストボックスがでてきません。なぜでしょうか? DLL側のソース(一部)  Inherits System.Web.UI.UserControl'ユーザーコントロールと定義  Protected WithEvents TextBox1 As System.Web.UI.WebControls.TextBox'テキストボックスはりつけ

質問者が選んだベストアンサー

  • ベストアンサー
  • todo36
  • ベストアンサー率58% (728/1234)
回答No.5

override protected void OnInit(EventArgs e) { Control c = this.LoadControl("../WebApplication1/WebUserControl1.ascx"); Label1.Controls.Add(c); } 仮想パス '*/WebApplication1/WebUserControl1.ascx' がほかのアプリケーションに割り当てられていますが、これは許可されていません。 とエラーが出てやはり無理ですね。 http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?forum=7&topic=11522

lord_chan
質問者

補足

ありがとうございます。一旦しめます。

その他の回答 (4)

  • todo36
  • ベストアンサー率58% (728/1234)
回答No.4

> ユーザーコントロールを動的に貼り付け 同一プロジェクトなら LoadControl("hoge.ascx") でいいけど、別プロジェクトではやったことない。

lord_chan
質問者

補足

ありがとうございます。 LoadControl("hoge.ascx") だけだと、表示できませんでした。なにかプロパティの設定とかいるのでしょうか?

  • todo36
  • ベストアンサー率58% (728/1234)
回答No.3

>Inherits System.Web.UI.WebControls.TextBox >とするとかろうじてテキストボックスは表示されるのです。 それはカスタムコントロールです。 http://www.microsoft.com/japan/msdn/library/ja/vbcon/html/vbconwebusercontrolsvscustomwebcontrols.asp より Web ユーザー コントロール Visual Studio のツールボックスに追加できない。 ということでカスタムコントロールを作るしか手はないと思う。

lord_chan
質問者

補足

別プロジェクトのユーザーコントロールは使えないということでしょか? DLL(ユーザーコントロール)を参照設定して、ユーザーコントロールを動的に貼り付けできないのでしょうか? object.Controls.Add(dllTxt) みたいな感じで。

  • todo36
  • ベストアンサー率58% (728/1234)
回答No.2

考えてみたら、 別プロジェクトのDLL参照しても、ascxファイルは参照 していない。 外部のユーザーコントロールは使えないのは当然でしょう。

lord_chan
質問者

補足

ありがとうございます。使える場合もあります。 Inherits System.Web.UI.UserControl ではなく Inherits System.Web.UI.WebControls.TextBox とするとかろうじてテキストボックスは表示されるのです。UserControlにTextBoxを張り付けても、TextBoxが表示されないんです。こまりました。

  • todo36
  • ベストアンサー率58% (728/1234)
回答No.1

> WebアプリケーションにそのDLLを張り付けても DLLを貼り付けるのではなくて、ユーザーコントロールを貼り付けるのでしょう。 でも、別プロジェクトのDLLをツールボックスに登録してもユーザーコントロールは 灰色なので貼り付けできない。 もちろん、カスタムコントロールならOKです。 もしかして、外部のユーザーコントロールは使えないというオチかも。

関連するQ&A

  • .net VB タブインデックスの設定について

    .net VB タブインデックスの設定について 困り果てています↓ ユーザーコントロールがあり テキストボックスが2つあるとします。 TextBox1,TextBox2 Formに上記のユーザーコントロールを組み込みます。 オブジェクト名はUserControl_1,UserControl2 タブ移動の順番を 1番⇒UserControl_1.TextBox1 2番⇒UserControl_2.TextBox1 3番⇒UserControl_1.TextBox2 4番⇒UserControl_2.TextBox2 みたいには出来ないでしょうか? 出来れば作り直しにしない方向にしたいのですが…。 どなたかアドバイス宜しくお願いします!

  • ASP.NETでWebユーザーコントロールを作成していますが、あるユー

    ASP.NETでWebユーザーコントロールを作成していますが、あるユーザーコントロールを拡張して別のユーザーコントロールを作成したいと思っています。 Webカスタムコントロールであれば、クラスの継承の概念を使って派生クラスを作成し、追加したいコントロールやフィールドを派生クラスで追加するのですが、ユーザーコントロールでこれと同じ事はできないものでしょうか? Visual Studio 2005環境ですが、Webカスタムコントロールはデザイナを使った開発ができず、わざわざDLLにコンパイルした後aspxページに埋め込んでやらないと見た目を確認できません。その点、ユーザーコントロールは通常のWindowsフォームアプリケーションのように、デザイナ上でコントロールをD&Dし、プロパティエディタでプロパティの設定もできます。 下記に試してみたコードを示します。 [WebUserControl1.ascx] <%@ Control Language="C#" AutoEventWireup="true" CodeBehind="WebUserControl1.ascx.cs" Inherits="WebApplication1.WebUserControl1" %> <%@ Register Assembly="WebBaseFormLib" Namespace="WebBaseFormLib" TagPrefix="cc1" %> <asp:Button ID="Button1" runat="server" Text="Button1" /> <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox> [WebUserControl1.ascx.cs] namespace WebApplication1 { public partial class WebUserControl1 : System.Web.UI.UserControl { protected void Page_Load(object sender, EventArgs e) { } } } [WebUserControl2.ascx] <%@ Control Language="C#" AutoEventWireup="true" CodeBehind="WebUserControl2.ascx.cs" Inherits="WebApplication1.WebUserControl2" %> <%@ Reference Control="~/WebUserControl1.ascx" %> <asp:Button ID="Button2" runat="server" Text="Button2" /> [WebUserControl2.ascx.cs] namespace WebApplication1 { public partial class WebUserControl2 : WebUserControl1 //WebUserControl1を継承 { protected void Page_Load(object sender, EventArgs e) { } } } こうした場合に、WebUserControl2をaspxページで使用してもButton2しか表示されません。 期待する動きとしては、WebUserControl1に配置したButton1とtextbox1が透過的に表示して欲しかったのですが。

  • 自動生成コードを変更したい(VB.NET) 続

    前回の質問内容に説明が足りなかったので、詳細を書きます。 下記のようなTextBoxを継承した、ユーザコントロールを作成します。Textプロパティの初期値として、AAAを設定します。 Public Class UserControl1 Inherits System.Windows.Forms.TextBox #Region " Windows フォーム デザイナで生成されたコード " (中略) <System.Diagnostics.DebuggerStepThrough()> Private Sub InitializeComponent() ' 'UserControl1 ' Me.Text = "AAA" End Sub #End Region End Class 作成したユーザコントロールをフォームに追加します。すると、下記のようにTextが自動設定され、TextがUserControl11になってしまします。 このフォームに追加した時に自動で設定されるコードの部分を変更するにはどうしたらよいのでしょうか。 Public Class Form2 Inherits System.Windows.Forms.Form #Region " Windows フォーム デザイナで生成されたコード " (中略) Friend WithEvents UserControl11 As ImputmanTest.UserControl1 <System.Diagnostics.DebuggerStepThrough()> Private Sub InitializeComponent() Me.UserControl11 = New ImputmanTest.UserControl1 Me.SuspendLayout() ' 'UserControl11 ' Me.UserControl11.Location = New System.Drawing.Point(112, 200) Me.UserControl11.Name = "UserControl11" Me.UserControl11.TabIndex = 5 Me.UserControl11.Text = "UserControl11" (中略) End Sub #End Region End Class

  • C#.NET2005 DllへのWebコントロール渡しについて

    初めまして、towatowatoです。 C#.NET2005(ASP.NET)の開発を行っています。 構成としては下記のようにして開発しています。 ----------------------------------------------- <ソリューション>   --[Webプロジェクト]     |     --Web画面   --[クラスライブラリプロジェクト]     |     --Web画面用ビジネスロジック     |     --Web画面用データロジック ----------------------------------------------- Webプロジェクト側でクラスライブラリプロジェクトで 作成されたDLL参照をして、呼び出ししています。 しかし画面コントロールをビジネスロジックに渡そうにも 下記エラーが表示されます。 ------------------------------------------------------------- 'System.Web.UI.WebControls.WebControl' が参照されていないアセンブリで定義されています。 アセンブリ 'System.Web, ersion=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' への参照を追加してください。 ------------------------------------------------------------- ビジネスロジッククラス側で ”using System.Web.UI”としても認識致しません。 どのようにすればいいのでしょうか? 初歩的な質問かもしれませんが、 何卒ご教授のほどよろしくお願いします。

  • ASP.NET2.0 GridViewコントロール

    お世話になります。 Vs2005のASP.NETを学習しております。 現在グリッドビューコントロールに、SQLデータソースコントロールを関連付けて、Oracleデータベースよりテーブルの項目を取得しました。 グリッドビューコントロールはコントロール機能として、更新・削除・追加もコードレスで行えるような仕組みになっているのですが、 更新を行い実行したら、下記のエラーが表示されてしまいました。 '/WebSite4' アプリケーションでサーバー エラーが発生しました。 -------------------------------------------------------------------------------- ORA-12704: キャラクタ・セットが一致しません。 説明: 現在の Web 要求を実行中に、ハンドルされていない例外が発生しました。エラーに関する詳細および例外の発生場所については、スタック トレースを参照してください。 例外の詳細: System.Data.OracleClient.OracleException: ORA-12704: キャラクタ・セットが一致しません。 ソース エラー: 現在の Web 要求の実行中にハンドルされていない例外が生成されました。障害の原因および発生場所に関する情報については、下の例外スタック トレースを使って確認できます。 スタック トレース: [OracleException (0x80131938): ORA-12704: キャラクタ・セットが一致しません。 ] System.Data.OracleClient.OracleConnection.CheckError(OciErrorHandle errorHandle, Int32 rc) +166 System.Data.OracleClient.OracleCommand.Execute(OciStatementHandle statementHandle, CommandBehavior behavior, Boolean needRowid, OciRowidDescriptor& rowidDescriptor, ArrayList& resultParameterOrdinals) +1719 System.Data.OracleClient.OracleCommand.ExecuteNonQueryInternal(Boolean needRowid, OciRowidDescriptor& rowidDescriptor) +503 System.Data.OracleClient.OracleCommand.ExecuteNonQuery() +125 System.Web.UI.WebControls.SqlDataSourceView.ExecuteDbCommand(DbCommand command, DataSourceOperation operation) +493 System.Web.UI.WebControls.SqlDataSourceView.ExecuteUpdate(IDictionary keys, IDictionary values, IDictionary oldValues) +915 System.Web.UI.DataSourceView.Update(IDictionary keys, IDictionary values, IDictionary oldValues, DataSourceViewOperationCallback callback) +179 System.Web.UI.WebControls.DetailsView.HandleUpdate(String commandArg, Boolean causesValidation) +1197 System.Web.UI.WebControls.DetailsView.HandleEvent(EventArgs e, Boolean causesValidation, String validationGroup) +545 System.Web.UI.WebControls.DetailsView.OnBubbleEvent(Object source, EventArgs e) +162 System.Web.UI.Control.RaiseBubbleEvent(Object source, EventArgs args) +56 System.Web.UI.WebControls.DetailsViewRow.OnBubbleEvent(Object source, EventArgs e) +117 System.Web.UI.Control.RaiseBubbleEvent(Object source, EventArgs args) +56 System.Web.UI.WebControls.LinkButton.OnCommand(CommandEventArgs e) +107 System.Web.UI.WebControls.LinkButton.RaisePostBackEvent(String eventArgument) +175 System.Web.UI.WebControls.LinkButton.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(String eventArgument) +31 System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler sourceControl, String eventArgument) +32 System.Web.UI.Page.RaisePostBackEvent(NameValueCollection postData) +244 System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +3840 -------------------------------------------------------------------------------- バージョン情報: Microsoft .NET Framework バージョン:2.0.50727.832; ASP.NET バージョン:2.0.50727.832 もしかしたら当たり前のことなのかもしれませんが、私には原因が掴めず困ってしまいました。 何かしらのヒントを教えて頂けたら幸いです。 どうか宜しくお願い致します。

  • web上のTextBoxに値を代入したい

    asp.netとVBでwebプログラムを作成しています。 web上にTextbox1~Textbox10を置いて、それぞれに1,2,3,4・・・・10を代入したい場合 Textbox1.text = 1 Textbox2.text = 2 ・ ・ Textbox10.text = 10 と書けば、それぞれに数字が代入され表示されますが、 For i = 1 to 10 Me.controls("Textbox" & cstr(i)).text = i Next と言うような書き方でコンパクトにまとめることは可能なんでしょうか? ちなみに、上記の記述をすると、「.textはSystem.Web.UI.Controlのメンバーでない」旨の エラーになります。 どなたかご教示お願いします。

  • EXCEL VBA ユーザフォームで複数のコントロールを作るとき

    VBAにてシステムを作っています。当該システムの性格上、ユーザフォーム上のコントロールが多量にあります(テキストボックスが30個ぐらい) このように複数のコントロールを作成する場合、オブジェクト名を textbox1,textbox2というように自動で連番を振ってくれるのですが、都合上textboxというオブジェクト名を使えなくなってしまいました。 目的としては txt1,txt2というように任意のオブジェクト名で自動的に連番を振ってほしいのですが、そのような機能はVBEにありますでしょうか?もしくはそういったアドインがあれば教えていただきたいです。いちいち30個もあるコントロールのプロパティをあけて名前を変えるというような非効率的なものは避けたいので・・・。

  • VB2010ユーザーコントロール

    お世話になります。 VB2010でユーザーコントロールのテキストボックスを作成しました。 昨日としては簡単で (1)フォーカスが当たった場合、テキストボックスの背景色の色を変える。 (2)文字を全選択する。 Protected Overrides Sub OnEnter(ByVal e As System.EventArgs) Me.BackColor = SettingsInfo.FocusColor '(1) Me.SelectAll() '(2) MyBase.OnEnter(e) End Sub 上記のようにコードを書いた場合、(1)は正常に動くのですが (2)で文字が全選択されません。 原因を教えていただければ幸いと存じます、宜しくお願い致します。

  • ASP.NET web アプリケーションでの入力検証に関して質問です

    ASP.NET web アプリケーションでの入力検証に関して質問です 当方.NET、オブジェクト指向言語初心者です 検討違いなことを質問しているかもしれませんが 回答いただけたら幸いです 以下を使用しています visual studio 2008 .NET Framework 3.5 C# 新規プロジェクト作成時に ASP.NET web アプリケーションを選択し、 (ASP.NET MVC等ではなく) TextBox Button を配置し Buttonを押下した時に TextBoxに何も入力されていなかった場合 エラーメッセージを表示するような入力検証を System.ComponentModel.DataAnnotations を用いて行いたいと考えています (RequiredFieldValidatorではなく) Q1 新規プロジェクト作成時にASP.NET web アプリケーションを選択した場合 System.ComponentModel.DataAnnotations を用いて入力検証はおこなえるのでしょうか? (webで検索したところASP.NET MVCやSilverlightのサンプルはあったのですが・・・) Q2 Q1がYESの場合 具体的にはどう実装すればよいのでしょうか? 以下にソースを記載します ■Defaoult.Aspx <%@ Page Title="ホーム ページ" Language="C#" MasterPageFile="~/Site.master" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="WebApplication2._Default" %> <asp:Content ID="HeaderContent" runat="server" ContentPlaceHolderID="HeadContent"> </asp:Content> <asp:Content ID="BodyContent" runat="server" ContentPlaceHolderID="MainContent"> <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox> <asp:RequiredFieldValidator ID="RequiredFieldValidator1" runat="server" ControlToValidate="TextBox1" ErrorMessage="RequiredFieldValidator"></asp:RequiredFieldValidator> <br /> <asp:Button ID="Button1" runat="server" onclick="Button1_Click" Text="Button" /> </asp:Content> ■Default.aspx.cs using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; using System.ComponentModel.DataAnnotations;  //←※ namespace WebApplication2 { public partial class _Default : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { } protected void Button1_Click(object sender, EventArgs e) { } } } ※ 参照の追加で System.ComponentModel.DataAnnotations を追加して usingで定義するところまでは検討がつきました 以上、宜しくお願い致します

  • ユーザコントロール間でWebコントロールの参照

    ASP.NETでWebアプリケーションを作成しています。 環境:.net framework 1.1, C#, ASP.net 1.1 問題点はあるページにAというユーザコントローラとBというユーザコントローラがあります。 Aにはテキストボックスがあり、Bにはボタンがあります。 Bのボタンを押下するとクリックイベントでAのテキストボックスから 入力内容を取得してURLにパラメータとしてくっつけて、リダイレクトする という処理です。 ここでBのユーザコントローラからAのテキストボックスを参照する にはどうしたらよいでしょうか? A,Bともに他のページで共通で使用するので部品化しています。 ご教授のほどよろしくお願いします。

専門家に質問してみよう