問題タブ [initializecomponent]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c# - デザインビューがデフォルトのコンストラクターを使用しないようにするにはどうすればよいですか?
状況:折りたたみ式パネルを作成しています。私のビジネスの状況では、パネルに次のことをサポートしてもらう必要があります。
「方向」(つまり、上、下、左、または右にドッキングします)。これにより、折りたたむ方向やその他のいくつかの方向が変わります。
「スタイル」。この製品には、いくつかの定義済みの視覚スタイルがあります(背景色、グラデーションの有無、テキストの色、ホバーの色などの定義)。
ここに問題があります:特定のスタイルは特定の方向と互換性がありません。要件は次のとおりです。
プログラマーが互換性のないスタイルと方向を持つようにパネルをコーディングした場合、プログラマーを防止/警告する何らかの方法が必要です。たとえば、互換性がない場合にパネルにランタイム例外をスローさせると、この要件が満たされます。
実行時にスタイルまたは方向を動的に変更することを誰にも許可しないでください。必要に応じて、で「動的に」変更できるようにすることはできますが
InitializeComponent
、他の場所では変更できません。パネルはデザインビューに表示される必要があります。ただし、必ずしもデザインビューでドラッグアンドドロップできるとは限りません。技術的には、デザインビューでパネルの属性を変更する必要もありません。可能であれば、私は明らかにそれらの他のもののいずれかが欲しいのですが。
考えられる解決策の1つ:コンストラクターに方向とスタイルの2つの入力を取得させます。そうすれば、両方の変更がアトミックアクションとして扱われます。両方を同時に変更しないと、方向/スタイルを変更してからもう一方を変更するまでの間、パネルは一貫性のない状態になります。それは避けたい。
デザインビューでデフォルトのコンストラクターを使用しないようにするにはどうすればよいですか、および/または要件を満たすためのより良い方法は何ですか?
ノート
パネルは単なる例であり、より広範な質問をするためのユースケースです。この投稿で、デザインビューに要件を処理させるためのベストプラクティスに関する直接的な質問に答えてもらいたいと思います。Visual Studioがデフォルト以外のコンストラクターの挿入をサポートしている場合は、そのInitializeComponent
方法(およびそれに伴う警告)を知りたいと思います。記載されている要件を満たすより良い方法があれば、それも知りたいと思います。
vb.net - InitializeComponent() エラー ヘルプ
私は Visual Studio 2005 の初心者プログラマーであり、VB でコーディングしていますが、助けが必要でした。
InitializeComponent() を呼び出すたびに、このエラーが発生しています。
ComException は未処理でした クラスが登録されていません (HRESULT からの例外: 0x80040154 (REGDB_E_CLASSNOTREG))
どういう意味ですか ??そして、どうすればそれを通り抜けることができますか??
ありがとうございました。
c# - Windows フォーム InitializeComponent のパフォーマンスを自動的に最適化する
おかげでロードに約750ミリ秒かかる完全なGUIを備えたプログラムがありますInitializeComponent()
。InitializeComponent
いくつかの調査の結果、.NET がセクションを通過するのにかかる時間を改善するためのテクニックがいくつかあるようです。これらには以下が含まれます:
1: NGen などを使用します。
2: Speed-optimise Windows Forms アプリケーションに示されているように、マルチスレッドを使用する
3: InitializeComponent の最適化 (1 秒かかります!)に示されているように、追加する前にコントロール プロパティを設定するなどのさまざまなテクニック。
残念ながら、(1) 私の場合は約 20% しか改善されず、(2) と (3) は実装に時間がかかり、完全な GUI デザイナーの利便性が犠牲になっています。
ソースコードを直接取得して、より短く、より効率的なコードを生成する自動化されたソリューションはありますInitializeComponent()
か?
c# - InitializeComponent()でアプリケーションがクラッシュする
まず、Visual Studio 2010、Measurement Studio 2010プラグイン、C#、および.NET4.0を使用しています。
私のアプリケーションはUSBデバイスからデータを受信し、WaveformPlot()
[MeasurementStudioの一部]を使用してデータをグラフ化します。bin
デバッグモードとリリースモードでアプリケーションを正常に実行でき、開発用コンピューターのフォルダー内のEXEファイルを使用して直接正常に実行することもできます。
ただし、別のコンピューターで実行することはできません。ClickOnceを使用してインストールファイルとフォルダーを作成し、発行フォルダーを開発用コンピューターからクライアントコンピューターにコピーします。次に、インストールファイルを実行し、ClickOnceが.NETをダウンロードして(まだインストールされていない場合)、アプリケーションを開きます。アプリケーションは、利用可能な多くのCOMポートからCOMポートを選択するように求める最初のダイアログを表示します。これを行うと、コードが実行され、InitializeComponent()
その後、メインフォームが表示されます。
最初のボックスの後でメインフォームが開きません。ステートメントを使用Debug.WriteLine
して、私はそれをに絞り込むことができました
ここでクラッシュします。エラーメッセージなどは表示されません。他のコンピューターではなく、開発用コンピューターで正常に動作します。National Instruments DLLファイルを含めましたが、他のNationalInstrumentsコンポーネントは正常に初期化されています。そうでないのはこれだけです。アプリケーションはWindowsタスクマネージャーにしばらく表示され、10秒ほどで消えます。
私は何をすべきか?
アップデート1
Application.run
Stack Overflowに関する別の無関係な質問を読んだ後、とform1 mainform = new form1()
をtry-catchブロックに入れることができることに気付きました。
System.TypeInitializationException:「NationalInstruments.UI.Internal.WaveformPlotElement」の型初期化子がスローして例外をスローしました。-> System.IO.FileNotFoundException:ファイルまたはアセンブリ'NationalInstruments.Common.Native.dll'またはその依存関係の1つを読み込めませんでした。指定されたモジュールが見つかりませんでした。
少なくとも今は例外だとわかっているので、それに取り組み、不足しているDLLとその理由を特定し、この質問を更新します。
アップデート2
公開フォルダにあるアプリケーションファイルを確認しましたが、「NationalInstruments.Common.Native.dll」が含まれています。なぜロードできないのかわかりません。
アップデート3
クライアントコンピューターでNationalInstruments.Common.Native.dll
FusionLogViewerを実行したところ、が正常に読み込まれたことがわかりました。それでも、デバッグ例外メッセージはOPに示されているように表示されます。
ファイルまたはアセンブリ'NationalInstruments.Common.Native.dll'またはその依存関係の1つを読み込めませんでした
Fuslog Viewerは、すべてのアセンブリが正常にロードされたことを示しています。クライアントコンピュータをチェックしました。ただし、National Instruments DLLファイルには、「GACルックアップが失敗しました」という行がありますが、他のアセンブリにはありません。
DebugViewerは、を使用して印刷した例外を表示しますDebug.writeLine
。これは、NationalInstruments.Common.Native.dll
またはその依存関係の1つをロードできなかったことを示しています。
私は非常に混乱しています。
プロジェクトへの参照を追加しようとしました。逆コンパイラーを使用して参照を確認し、他のインストールプログラム(ClickOnce以外)を使用しましたが、どれも私をどこにも連れて行ってくれないようです。:(
アップデート4
昨日、アプリケーションが64ビットシステムに正常にインストールされ、実行されていることがわかりました。以前に試した2台のコンピューターは、32ビットのWindows7システムでした。私はそれがどういうわけか私を助けることができるかどうかを見たいと思っています。アプリケーションは、64ビットのWindows7開発ラップトップでコンパイルされました。プロジェクトプロパティの下の「ビルド」の「プラットフォーム」ドロップダウンメニューに「アクティブ(x86)」と表示され、プラットフォームターゲットとして「任意のCPU」があります。
winforms - VS2010 Winform デザイナーはまともなコードを変更します
WinForm デザイナで問題が発生しています。新しい UserControl を作成し、DataGridView、その他の要素、および TreeView を追加しました。GUI を使用して、これらすべての新しいコンポーネントに名前を付けました。今度はそのコードをコーディングします。デザイナーが TreeView のノードの名前を間違えたことに気付きました。AutoGenerateColumn が false に設定されていても、デザイナーは DataSource から新しい列を追加しました。私は「まあ、デザイナーのがらくたをもう一度きれいにする時間です...」そして、 InitializeComponent 関数でそのようなものをきれいにしました(「コードエディターで変更しないでください」というラベルが付いていることは知っていますが...選択肢がありますか?
とにかく、私の問題は次のとおりです。デザイン ビューに戻ると、VS デザイナーはコードを再生成しているように見えますが、元の状態でさえありません。これで、デザイナーは DataGridView と TreeView を InitializeComponent 関数のローカル メンバーとして宣言します。変更を簡単に修復して元に戻すことができますが、デザイナーの自動コード生成を無効にする方法があるかどうかを知りたいです。
また、デザイナーが台無しにして初期化コンポーネントに呼び出さないように、必要なものをすべて備えた別の関数を作成しようとしました。このソリューションは実行時に機能しますが、デザイン ビューでは機能しません。私はちょっと低いです。
c# - フォームの resx ファイルには、Point/Size およびその他の奇妙な UI オブジェクトが含まれています
何らかの理由で、フォームの 1 つが対応する resx ファイルからすべての UI 要素データを読み取ります。代わりに、コード内ですべてのデータを明示的に割り当てる必要があります。
たとえば、resx ファイルにはフォーム ボタンの場所が含まれてい
ます
。68
ではInitializeComponent
、データはApplyResources関数によってロードされます。
このプロジェクトでは、これは不要です。肥大化したリソース ファイルを読み込まずに UI データを割り当てたい!
Q: このリソース バインドはどのように発生し、標準の動作に戻すにはどうすればよいですか?
c# - InitializeComponentのコード生成をカスタマイズするにはどうすればよいですか?具体的には、生成されたすべてのコードを後処理するにはどうすればよいですか?
Windowsフォームデザイナのコード生成をカスタマイズしようとしていますInitializeComponent
。MSDNの記事「.NETFrameworkVisualDesignerでのコード生成のカスタマイズ」には、これを行う方法の基本を説明する「コード生成の制御」セクションが含まれています。
私は上記の記事の例に厳密に従いました:
今、私はこれを私のフォームに接続しますSomeForm
:
その後、FormsDesignerは次のInitializeComponent
コードを生成する可能性があります。
コメントはの最初の行としてではなく、フォームオブジェクト自体のプロパティを処理するコードブロックの最初の行としてのみ// CODEDOM WAS HERE
追加されていることに注意してください。InitializeComponent
特定のオブジェクトを処理する部分だけでなく、メソッド全体の生成されたCodeDOMを変更できるようにするには、どうすればよいですか?
背景:なぜこれをしたいのですか?Windowsフォームでは、データバインディング中に柔軟な値変換が必要な場合、通常、特定のオブジェクトのイベント
Format
とイベントをサブスクライブする必要があります。そのため、このプロセスを少し単純化する特殊なサブクラス(これを呼びましょう)を作成しています。Parse
Binding
Binding
ConvertingBinding
ここで問題となるのは、Windowsフォームデザイナでデータバインディングを設定すると、生成されたコードが
Binding
;のインスタンスを作成することです。ただし、代わりに、デザイナーに自分の特殊なサブクラスをインスタンス化してもらいたいと思います。私の現在のアプローチは、設計者が最初にCodeDOMツリーを作成し、次にそのツリーをウォークして、のすべてのインスタンス化をのインスタンス化に置き換えることBinding
ですConvertingBinding
。
.net - InitializeComponent が公開されている理由
私の WPF ユーザー コントロールのパブリック インターフェイスには、自動生成された InitializeComponent メソッド (部分クラスに含まれています) が含まれています。このような内部的なものはプライベートであると思っていたので、私にとっては驚きでした.
ユーザー コントロールのパブリック インターフェイスから InitializeComponent を削除する方法はありますか?
wpf - ジェネリック UserControls とジェネリック Dependency プロパティは可能ですか?
サブクラス化クラスによって型が定義されるジェネリック依存プロパティを定義する抽象ジェネリック クラスがあります。このプロパティはどういうわけか依存関係プロパティとして認識されないため、実行時にこのプロパティにバインドするとエラー メッセージが表示されます。さらに、コンパイル時にコンストラクターを呼び出すことはできませんInitializeComponent
。何故ですか?
汎用抽象クラスMyClass
:
対応する XAML:
具体的なサブクラスMySubClass
:
対応する XAML:
PS私はまた、partial
物事が正しく行われたかどうかもよくわかりません.R#はこれらのキーワードを削除することを提案しています.
c# - InitializeComponent内で作成されたコントロールにコンストラクターパラメーターを渡す
InitializeComponent
フォームにコンポーネントを設定します。ただし、作成したUsercontrolの場合、デフォルトのコンストラクターを呼び出しますが、usercontrolで(パラメーターを使用して)独自のコンストラクターを呼び出します。ボイラープレートコードは内容を編集しないと言っているので、これを行うための最良の方法は何ですか?