1

GUIでテキストをレンダリングし、URLを再認識しようとしています。また、クリックイベントが実行されたときにブラウザでURLを開く必要があります。以下にモデルコードスニッペントを添付しました。私の質問は、これらのテキストを有効なURLにする方法と、クリックイベントに応答するようにする方法です。そしてもう1つ、いくつかの要件のために、以下のコードスニペットの構造を変更することはできません。

namespace Model
{
    public partial class ParentView : Form
    {        
        public ParentView()
        {
            InitializeComponent();            
        }
        private void ParentView_Paint(object sender, PaintEventArgs e)
        {
            GraphicsState state = e.Graphics.Save();
            GraphicsRenderer renderer = new GraphicsRenderer(e.Graphics);
            renderer.RenderAsImage();
            e.Graphics.Restore(state);
            e.Graphics.DrawRectangle(new Pen(Brushes.Black), 0, 0, 300, 300);
            //I believe need to do something here
        }        
    }  

public class GraphicsRenderer
{ 
    Graphics PageGraphics;
    public GraphicsRenderer(Graphics g)
    {
        PageGraphics = g;
    }

    public void RenderAsImage()
    {
        Point currentLocation = new Point(0, 0);

        PageGraphics.TranslateTransform(20, 40);
        PageGraphics.DrawString("www.google.com", new Font("Arial", 12, FontStyle.Regular, GraphicsUnit.Point), Brushes.Black, currentLocation);

        PageGraphics.TranslateTransform(20, -40);
        PageGraphics.DrawString("www.stackoverflow.com", new Font("Arial", 12, FontStyle.Regular, GraphicsUnit.Point), Brushes.Black, currentLocation);

        currentLocation = new Point(50, 60);
        PageGraphics.DrawString("www.stackoverflow.com", new Font("Arial", 12, FontStyle.Regular, GraphicsUnit.Point), Brushes.Black, currentLocation);
    }
}    
}

ありがとう、Mkn

4

2 に答える 2

0

御返答いただき有難うございます。私はさらに分析し、方法を見つけました。テキスト上に長方形を描画し、Rectangleを使用してマウスクリックイベントで長方形を検索します。含む(MouseLeftClikLocation)。

今、私は別の問題を抱えています。スケール変換を実行すると、グラフィックを復元した後、場所を取得できませんでした。

以下のコードsnnipetを見つけてください。

private void ParentView_Paint(object sender, PaintEventArgs e)
{
    GraphicsState state = e.Graphics.Save();
    GraphicsRenderer renderer = new GraphicsRenderer(e.Graphics);
    renderer.RenderAsImage();
    e.Graphics.Restore(state);
    e.Graphics.DrawRectangle(new Pen(Brushes.Black), 0, 0, 300, 300);

    //I am changing here
    float[] transformPoints = renderer.transformPoints.Elements;
    e.Graphics.TranslateTransform(transformPoints[4], transformPoints[5]);
    Point currentLocation = renderer.currentLocation;
    e.Graphics.DrawRectangle(new Pen(Brushes.Black),new Rectangle(currentLocation.X,currentLocation.Y,190,30));
}
public class GraphicsRenderer
{
    Graphics PageGraphics;
    internal Matrix transformPoints = new Matrix();
    internal Point currentLocation = new Point(0, 0);

    public GraphicsRenderer(Graphics g)
    {
        PageGraphics = g;
    }

    public void RenderAsImage()
    {
        currentLocation = new Point(50, 60);
        //PageGraphics.ScaleTransform(3, 3);
        PageGraphics.DrawString("www.bing.com", new Font("Arial", 12, FontStyle.Regular, GraphicsUnit.Point), Brushes.Black, currentLocation);
        transformPoints = PageGraphics.Transform;
    }
}
于 2012-09-20T05:29:09.127 に答える
0

テキストをグラフィックとして画面に書き込んでいるだけでは、クリック可能にすることはできません。LinkLabelブラウザーで URL を開くようにトリガーするには、またはその他のクリック可能なコントロールを適切な位置に配置する必要があります。

于 2012-09-18T09:23:38.353 に答える