2009-12-04 6 views
5

私が取り組んでいる.Net 2.0 Winformsアプリケーション用の便利なUIを作成するために、私は標準コントロールの "外の"動作をはるかに超えたコントロールが必要です。私が達成しようとしているもののモックアップは、次のとおりです。複合.Net 2.0 Windowsフォームコントロール:どこから開始するのですか?

基本的に

Mock up http://www.claware.com/images/temp/mockup.png

、アプリケーションのこの部分は(部族の言語から音節に単語を解析するを参照するために何の辞書をしようとしません。任意およびすべてのUnicodeユーザがこれを遠くに取得するまでに、彼はすでに母音や子音を言語やその他の設定で定義しています。 (1)アプリケーションは、いくつかの規則に基づいて言語内にどの音節が存在するかを推測する、(2)推測を精緻化する、正しい構文解析を選択する、または手作業で単語を構文解析する、 (4)データが "十分に良い"ものになるまで繰り返す。

コントロールは各単語(灰色の見出し)を表示し、すべての音節ブレーク推測(単語の部分を区切る白い部分)を表示する必要があります。手動で構文解析を入力する方法もありますテキスト領域と保存ボタン(モックアップの最下部にあります)。ユーザが推測の上を移動すると、背景が変わり、「受け入れ/拒否」ボタンが表示されます。受諾をクリックするか、手動による解析を入力すると、単語全体がリストから削除されます。拒否ボタンをクリックすると、その項目だけが削除されます。

私は上記の書式設定で100%売れたわけではありませんが、必要な書式設定と機能コントロールの一般的な考えを得ることができます。コントロールも垂直方向にスクロールします。最初に何千もの単語があるかもしれません。

私の経験豊富な質問WinForms開発者はどこですか?私は本当に、.Netコアフレームワークの中にとどまり、サードパーティのコントロールではなく既存のコントロールを拡張したいと思っています。 (宗教戦争を開始するリスク:はい、私はNIH症候群に苦しんでいますが、多くの迅速な解決策に基づく意識的な決定ですが、第三者のコントロールでは長期的な問題があります) "私のbucKのための強打"と少なくともホイールを再発明?リストビュー?リストボックス? ScrollableControl?コントロールに戻ってすべてを手動でペイントする必要がありますか?私は提供される可能性のある任意のヘルプに感謝!

[編集]みなさん、ありがとうございました。私の目的にとって最もエレガントなソリューションは、FlowLayoutPanelとVScrollBarで構成されるカスタムコントロールを作成することです。 FlowLayoutPanelには、各単語に使用されるカスタムコントロールのインスタンスを含めることができます。しかし、FlowLayoutPanelは仮想です。つまり、表示されているインスタンス(および単に「スクロールしていない」)が含まれているだけです。 VScrollBarイベントは、何をロードする必要があるかを決定します。書き込みのコードのビットが、あまりにも悪くないとうまくいくようです。

+0

あなたはWPFの使用を制限されていますか? 1つの点では、WinForms + HTMLであり、あなたのモックアップはExpression Blendで簡単に操作できます。 – sipwiz

+0

悲しいことに、はい。私はしばしばそれらの "人、私は本当に私たちがWPFを使うことができたらいい"という瞬間を持っています。 –

+0

私は完成品を見ることに興味があります.... – cjk

答えて

4

私は、TableLayoutPanelコントロールとFlowLayoutPanelコントロールを見ていきます。これらは、垂直方向に中程度の容易さで一連のコントロールを整理できるようになります。次に、ラベルと2つのボタンで構成されるUserControlを作成します。 UserControlは、テキストやボタンのクリックに対して公開されるイベントなどのプロパティを公開します。リスト内の各エントリに対して、UserControlのインスタンスを作成し、テキスト値を割り当て、クリックイベントを処理します。インスタンスは、テーブル/フローパネルに正しい順序で配置されます。これらのレイアウトパネルでは、他のアイテム間にアイテムを挿入できるため、アイテムをリストに動的に追加/削除できます。

編集: レンダリングしようとしているものの長さを考えて、DataGridViewを使用してカスタムレンダリングを行い、どのように動作させるかを検討します。 DGVのレンダリングイベントを使用して、列をマージし、背景色を変更したり(ダークグレー線の強調表示など)、ボタンをオン/オフにしたり、行を編集モードに変更して新しい値を変更または挿入できるようにすることができます。この方法では大規模なデータセットを簡単に処理でき、非常に簡単に直接バインドできます。

+0

小さなデータセットの場合、これはかなりうまくいくかもしれません。しかし、私は、FlowLayoutPanelsの読み込みに近づくずっと前に、ウィンドウハンドルを使い果たしてしまいました。単語1回につき何千ものユーザーコントロールが余りにも多くなります。たぶん、これの "仮想"バージョン、スクロール位置を追跡して... –

+0

私は元の質問の "何千もの言葉"が欠けていました。私は別の可能な解決策で私の答えを更新します。 –

+0

FlowLayoutPanelでネストされたカスタムコントロールの仮想バージョンが機能します。 –

0

ここで私はそれをやります。

カスタムコントロールを作成します。このカスタムコントロールでは、LinkBut​​tonの上にListBoxを置き、LinkBut​​tonをクリックするとTextBoxに移動できます。リストボックスは一番上の行を選択できないようにします。おそらくそこから残りを得ることができます。あなたは言葉のあなたのリストを取得する場合、単語ごとに一つの制御でいくつかの種類のスクロールを入力します。そこから

(foreach String word in words){ 
    myScrollable.add(new MyComponent(word)); 
} 

、私はあなたがボックスやデータで何をしたいのかわからないんだけど、それはですUIのセットアップに関する私の最初のアイデア。

2

これは確かに自分で作成するカスタムコンポーネントの候補に似ています。標準を使用してこれを作成することができます。ネット描画コマンドとテキストボックス、および通常のボタンコントロール。

ここで、どこから開始するかを知りたいと思います。

Windowsフォームコントロールライブラリプロジェクトを作成します。 テキストボックスとボタンコントロールをドロップします。

パネル描画コードはコードで行うことが望ましいです。これは、通常のGDI +コマンドを使用して行うことができます。

編集:

はここで、別のアイデアだと私は実質的に大きな成功を収めて自分のプロジェクトで使用されてきました1。

アプリでウェブブラウザコントロールを使用して、データをhtmlとして表示できます。テキストボックスの入力に基づいてWebブラウザコントロールのソースを更新し、Webブラウザコントロールのリンクをクリックすると、何らかのアクションを実行するためにトラップできるイベントが表示されます。あなたのCSSは動作します。

私はこの技術を使って、私が「正しい会計ソフトウェア」と呼んだアプリで「デスクトップ」を構築しました。人々はデスクトップをとても愛していて、アプリの最も愛された機能の1つです。

+0

これは非常に興味深いですね。どのように画像を扱ったのですか?それらを一時ディレクトリに保存し、そこにタグをポイントしますか?それとももっとエレガントな方法がありますか? –

+0

私はそれらをアプリケーションの特定のフォルダに入れました。私はこれが完全にエレガントなアプローチだと思う。 –

+0

私は最終的にウェブブラウザのルートに行くことはありませんでしたが、これは私が決して考えなかった魅力的なアイデアです。これは別のプロジェクトでは非常に便利です! –

0

WebBrowserコントロールを使用して、DocumentStreamまたはDocumentTextを使用してHTMLマークアップを生成します。

関連する問題