2

のカスタム コントロールをホストしたいと考えていますdatagridviewcell

私が持っている唯一の良いリファレンスはhttp://msdn.microsoft.com/en-us/library/7tas5c80.aspxでした

ただし、セルに自分のユーザーコントロールを代わりに表示したい

 public class CustomCell : DataGridViewTextBoxCell
 {   
     protected override void Paint(System.Drawing.Graphics graphics,
       System.Drawing.Rectangle clipBounds, System.Drawing.Rectangle cellBounds,
        int rowIndex, DataGridViewElementStates cellState, object value, object 
          formattedValue, string errorText, DataGridViewCellStyle cellStyle,
            DataGridViewAdvancedBorderStyle advancedBorderStyle, DataGridViewPaintParts paintParts)
     {
          base.Paint(graphics, clipBounds, cellBounds, rowIndex, cellState, value, 
            formattedValue, errorText, cellStyle, advancedBorderStyle, paintParts);               
     }
 }

誰でもそれを行う方法を教えてもらえますか?

4

1 に答える 1

1

リソースを節約するために、DataGridViewコントロール内のセルはほとんどの時間を表示モードで費やし、ユーザーがマウスまたはキーボードを使用してセルに入ったときにのみ編集モードに変わります。質問で参照した例は、編集コントロール (その場合は aDateTimePickerですが、簡単に独自のカスタム ユーザー コントロールにすることもできます) は編集モードでしか表示されないため、1 つのセルに対してのみ表示されるため、ベスト プラクティスと見なされます。一度に。

セルが編集モードでない場合、 のPaintサブクラスのメソッド内のロジックを使用して、セルの値と同等の表現をレンダリングする必要がありますDataGridViewCell。これは、いくつかの方法のいずれかで行うことができます。

  • 値に基づいてセルの境界にテキストまたは画像を描画するだけです。編集コントロールの外観を複製しようとしないでください。
  • ControlPaintorを使用して編集コントロールの外観をシミュレートしますVisualStyleRenderer(注: これには多くの余分な作業が必要です)。
  • ペイント コードをカスタム ユーザー コントロールからユーティリティ クラスに移動して、コントロールとセルの両方で同じペイント コードを使用できるようにします。

ほとんどの場合、最初のオプションで十分です。セルが編集コントロールとまったく同じに見えることが重要な場合にのみ、他のアプローチのいずれかを試してください。

于 2012-10-29T08:57:01.993 に答える