質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

87.91%

C#.net 図形 枠線について

解決済

回答 1

投稿 編集

  • 評価
  • クリップ 1
  • VIEW 3,759

score 13

前提・実現したいこと

塗りつぶした図形に枠線をつける
エクセルの[挿入][図形]で作成される図形を作成したい

よろしくお願いします。

発生している問題・エラーメッセージ

塗りつぶした図形に対して線がかすれている等
三角形は、補正値を入れることで対応したが他の多角形や円も綺麗に描画できないかと

該当のソースコード

C#

public Form1()
{
    InitializeComponent();

    // 図形描画用パネル
    Panel pZukei = new panel
    pZukei.BackColor = System.Drawing.Color.Lime;
    pZukei.Location = new System.Drawing.Point(39, 177);
    pZukei.Name = "userControl11";
    pZukei.Size = new System.Drawing.Size(18, 18);
    pZukei.TabIndex = 9;
    pZukei.Visible = true;

    // 高さ変更用
    TextBox txtH=new TextBox();
    this.txtH.Location = new System.Drawing.Point(110, 12);
    this.txtH.Name = "txtH";
    this.txtH.Size = new System.Drawing.Size(100, 19);
    this.txtH.TabIndex = 0;
    this.txtH.Text = "18";
    this.txtH.TextAlign = System.Windows.Forms.HorizontalAlignment.Right;
    TextBox txtW=new TextBox();
    txtW.Location = new System.Drawing.Point(110, 37);
    txtW.Name = "txtW";
    txtW.Size = new System.Drawing.Size(100, 19);
    txtW.TabIndex = 1;
    txtW.Text = "18";
    txtW.TextAlign = System.Windows.Forms.HorizontalAlignment.Right;
    Button button1 =new Button();
    button1.Location = new System.Drawing.Point(234, 12);
    button1.Name = "button1";
    button1.Size = new System.Drawing.Size(75, 23);
    button1.TabIndex = 2;
    button1.Text = "button1";
    button1.UseVisualStyleBackColor = true;
    button1.Click += new System.EventHandler(this.button1_Click);
    this.Controls.Add(this.pZukei);
    this.Controls.Add(this.txtH);
    this.Controls.Add(this.txtW);
    this.Controls.Add(this.button1);                       
}

// 図形描写
private void button1_Click(object sender, EventArgs e)
{
    pZukei.Size = new Size(int.Parse(txtW.Text), int.Parse(txtH.Text));
    // パネルの形を図形に合わせる
    pZukei.Region = new Region(Sankaku(uZukei.Size));
    pZukei.Refresh();

    pZukei.BackgroundImage = gpLine(pZukei.Size);
}

// 図形描写
private GraphicsPath Sankaku(Size size)
{
    GraphicsPath gPath = new GraphicsPath();

    float fltWidth=0;
    float fltHeight = 0;
    float fltWidth2 = 0;
    float fltHeight2 = 0;

    PointF[] pntPos=new PointF[3];// 図形の点の位置

    fltWidth = size.Width;
    fltHeight = size.Height;
    fltWidth2 = (float)(size.Width / 2.0);
    fltHeight2 = (float)(size.Height / 2.0);

    pntPos[0].X  = 0;
    pntPos[0].Y = fltHeight;
    pntPos[1].X = fltWidth2;
    pntPos[1].Y = 0;
    pntPos[2].X = fltWidth;
    pntPos[2].Y = fltHeight;

    gPath.AddPolygon(pntPos);


    return gPath;
}
// 線描写
private Image gpLine(Size size)
{
    //描画先とするImageオブジェクトを作成する

    PointF[] ptan = null;
    Bitmap canvas = new Bitmap(size.Width, size.Height);

    //ImageオブジェクトのGraphicsオブジェクトを作成する
    Graphics gPath = Graphics.FromImage(canvas);

    float fltWidth = 0;
    float fltHeight = 0;
    float fltWidth2 = 0;

    fltWidth = (float)size.Width - (float)1;
    fltHeight = (float)size.Height - (float)0.5;

    fltWidth2 = (float)(size.Width / 2.0);// 三角の上の横位置

    ptan = new PointF[3];

    //Penオブジェクトの作成(幅2黒色)
    Pen p = new Pen(Color.Black, 2);

    ptan[0].X = (float)0;
    ptan[0].Y = (float)size.Height ;

    ptan[1].X = (float)size.Width ;
    ptan[1].Y = (float)size.Height ;

    ptan[2].X = (float)size.Width / (float)2;
    ptan[2].Y = (float)0;

    gPath.DrawPolygon(p, ptan);

    //リソースを解放する
    gPath.Dispose();
    //PictureBox1に表示する
    return  canvas;
}

試したこと

それぞれの頂点の座標をずらすことを試したが
1図形に対して個々に調整が必要になります(図形の形、大きさ等)

補足情報(言語/FW/ツール等のバージョンなど)

Microsoft Visual Studio 2008
C#にて作成

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

checkベストアンサー

0

コードに対する回答ではありませんが、Blendの図形を利用してみてはいかがでしょうか。
すべての図形には対応できないかもしれませんが矢印や三角形などは使えると思います。

Blendの図形を利用する

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2016/09/07 13:09

    WPFについては、使ったことがなくVS2008の現状使えるか試していないのですが、
    急ぎの案件があるので、時間があるときに試させてもらいます。
    とりあえず今は解決済にさせてもらいます。

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 87.91%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る