6

私たちは、独自のデザイナーで DesignSurface と IDesignerHost のすべての優れた機能を使用しています。設計されたフォームは、独自の特注フォーマットで永続化され、すべてうまく機能します。また、フォームをテキストベースの形式にエクスポートしたいと考えています (それほど難しくないため、これを実行しました)。

ただし、そのテキストをデザイナーのドキュメントにインポートして戻すことも必要です。これには、デザイナー コードを CodeCompileUnit に戻すことが含まれます。残念ながら、Parse メソッドは実装されていません (間違いなく正当な理由があります)。代替手段はありますか?標準の .NET インストールに存在しないもの (Visual Studio と共にインストールされる .NET ライブラリなど) は使用したくありません。

私の現在の考えは、インポートされたテキストをコンパイルし、フォームをインスタンス化し、そのプロパティとコントロールをデザイン サーフェイス オブジェクトにコピーして、新しい CodeCompileUnit をキャプチャすることですが、もっと良い方法があることを望んでいました。ありがとう。


更新: 私たちの進歩に興味を持っている人もいるかもしれません。これまでのところ、あまり良くありません。私が発見したことの簡単な概要は、難しすぎると見なされたために Parse メソッドが実装されなかったということです。作業を行うオープンソースのパーサーは存在しますが、それらは完全ではなく、したがってすべての場合に機能することが保証されているわけではありません ( NRefactory は SharpDevelop プロジェクトの 1 つだと思います)、インスタンスからデザイナーへのコントロールのコピーはまだ機能していません。これは、デザイナー サーフェイスがラップするフォーム インスタンスにコントロールが追加されているにもかかわらず、デザイナー サーフェイスがそのコントロールを認識していないためだと考えられます。私たちの次の試みは、カット/ペーストを模倣して、それが解決するかどうかを確認することです. 明らかに、これは非常に厄介な回避策ですが、機能させる必要があるため、'

4

2 に答える 2

2

これはまさにあなたが求めていたものではありませんが、CodeDomComponentSerializationService クラスを使用して、デザイン サーフェイスの現在の状態に基づいて CodeDom グラフを生成することを試みることができます。

そのクラスを使用して、組み込みのデザイナーでコピー/貼り付け機能を処理します。

于 2008-10-11T14:39:34.947 に答える
2

いつでも独自の C# パーサーを作成できます。そうすることで完成度を確認することができます。

あなたの場合、インテリセンスのようなものは必要ないので、おそらくパーサー ジェネレーターを使用するだけで済むでしょう。

ただし、手書きの場合でも、おそらく約 1 か月もかかりません。

于 2009-01-30T23:25:06.017 に答える