1

マウスイベントを使用しGraphics.DrawLine()、 、Graphics.DrawRectangle()およびを使用して、長方形、線、および楕円の描画機能を実装した画像エディターを開発していGraphics.DrawEllipse()ます。

画像にテキストを書くことを探していましたが、解決策が見つかりませんでした。つまり、任意の場所で画像をクリックすると、カーソルが変化し (テキストボックスにテキストを書き込むなど)、その場所で入力を開始できます。

Graphics.DrawStringメソッドは私が探しているものと似ていますが、動的型付けをサポートしていません

4

2 に答える 2

2

Alex Fr はDrawTools の記事で優れた描画ツールのセットを提供しており、これらのツールはDraw Tool Reduxの基礎として機能します。

また、http: //www.codeproject.com/Articles/4390/AlphaBlendTextBox-A-transparent-translucent-textboの透明テキスト ボックスも使用します。

Textbox コントロールを Drawing Tools に追加するには、クラス ToolText と DrawText を作成する必要があります。

ToolText クラスでは、テキスト ボックスを持つ境界線のない "TextDialog" フォームを表示します。

internal class ToolText : ToolObject
{
public ToolText()
{
    Cursor = new Cursor(GetType(), "Rectangle.cur");
}
public override void OnMouseDown(DrawArea drawArea, MouseEventArgs e)
{
    Point p = drawArea.BackTrackMouse(new Point(e.X, e.Y));
TextDialog td = new TextDialog();
td.Location = new Point(e.X, e.Y + drawArea.Top + td.Height);
    if (td.ShowDialog() ==
    DialogResult.OK)
    {
    string t = td.TheText;
    Color c = td.TheColor;
    Font f = td.TheFont;
    AddNewObject(drawArea, new DrawText(p.X, p.Y, t, f, c));
    }
}

DrawText クラスは、Text、Font などのいくつかのプロパティを使用して、DrawRectangle から派生し、描画実装用に作成されます。

public override void Draw(Graphics g)
{
    Pen pen = new Pen(Color);
    GraphicsPath gp = new GraphicsPath();
    StringFormat format = StringFormat.GenericDefault;
    gp.AddString(_theText, _font.FontFamily, (int)_font.Style, _font.SizeInPoints,
                    new PointF(Rectangle.X, Rectangle.Y), format);
    // Rotate the path about it's center if necessary
    if (Rotation != 0)
    {
        RectangleF pathBounds = gp.GetBounds();
        Matrix m = new Matrix();
        m.RotateAt(Rotation, new PointF(pathBounds.Left + (pathBounds.Width / 2), pathBounds.Top + (pathBounds.Height / 2)),
                    MatrixOrder.Append);
        gp.Transform(m);
    }
    g.DrawPath(pen, gp);
    rectangle.Size = g.MeasureString(_theText, _font).ToSize();
    pen.Dispose();
}
于 2013-08-24T02:29:26.237 に答える
1

これは非常に高度な機能であり、.NET Framework の一部としては利用できません。マウス イベント ハンドラーとDrawString()メソッドを使用して、その機能を実装する必要があります。たとえば、ユーザーが画像をクリックすると、画像の上に透明な背景を持つテキストボックスを作成してみて (透明部分が簡単かどうかわからない/可能かどうかわからない)、ユーザーにテキストを入力させることができます。ただし、これでは書式設定機能は提供されません。

完全な WYSIWYG 編集を行うには、これを行う既存のコンポーネントを探すか、コードをゼロから作成する必要があります。

編集:この同様の質問を見てください:

透明なリッチテキスト ボックス

背景が透明な TextBox

これらによると、透明度はTextBoxコントロールではサポートされていません。

于 2013-08-24T02:02:48.103 に答える