- ベストアンサー
C#で角が丸いテキストボックス
C#で角が丸いテキストボックス C#で角が丸いテキストボックスを作成したいと考えています。 グループ化されたラベルやテキストボックスを解り易くしたい為です。 どなたかアドバイスよろしくお願いします。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
こんばんは。 ん? リージョンの事ですかねえ。 http://dobon.net/vb/dotnet/form/formregion.html RoundRectangleのリージョンは存在しないので、チョッと面倒みたいです。 http://www.geekpedia.com/code112_Draw-Rounded-Corner-Rectangles-Using-Csharp.html 上記のソースを御拝借して書くと、こんな感じです。かなり雑ですが、参考程度に。 後はTextBoxのBorderStyleをNoneにしておいて、TextBox用のペイントハンドラで、RoundRectangleの枠を描いて見てください。 private void SetRoundRect(Control ctl, float radius) { int width = ctl.Width; int height = ctl.Height; System.Drawing.Drawing2D.GraphicsPath gp = new System.Drawing.Drawing2D.GraphicsPath(); gp.AddLine(radius, 0, width - (radius * 2), 0); // Line gp.AddArc(width - (radius * 2), 0, radius * 2, radius * 2, 270, 90); // Corner gp.AddLine(width, radius, width, height - (radius * 2)); // Line gp.AddArc(width - (radius * 2), height - (radius * 2), radius * 2, radius * 2, 0, 90); // Corner gp.AddLine(width - (radius * 2), height, radius, height); // Line gp.AddArc(0, height - (radius * 2), radius * 2, radius * 2, 90, 90); // Corner gp.AddLine(0, height - (radius * 2), 0, radius); // Line gp.AddArc(0, 0, radius * 2, radius * 2, 180, 90); // Corner gp.CloseFigure(); ctl.Region = new Region(gp); } private void Form1_Load(object sender, EventArgs e) { SetRoundRect(this.textBox1, 20.0F); }
その他の回答 (2)
- machongola
- ベストアンサー率60% (434/720)
こんばんは。補足頂きました。 チョッと正攻法では無理な様ですので、枠を描かせない様にして下さい。 フォームデザイナで、黒いパネルコントロールを貼り付けて、そのパネルコントロールの上にテキストボックスを乗せてください。 その黒いパネルコントロールも一緒に、リージョンをかければ、テキストボックスの枠の様に見せかけれるでしょう。 パネルコントロールは、テキストボックスよりも、+2程大きめに調整します。これはプログラムの中で行った方が楽です。 後、フォームデザイナでパネルコントロールを配置した時、テキストボックスが隠れてしまったら、パネルコントロールを右クリックし、「最背面へ移動」を選択してください。 これで、パネルコントロールの上にテキストボックスが来る筈です。 以下の様にして見てください。 private void Form1_Load(object sender, EventArgs e) { panel1.Location = new Point(textBox1.Location.X - 2, textBox1.Location.Y - 2); panel1.Size = new Size(textBox1.Width + 4, textBox1.Height + 4); SetRoundRect(this.textBox1, 20.0F); SetRoundRect(this.panel1, 20.0F); }
お礼
何度もすいません。アドバイスありがとうございます。 正攻法では無理なんですね。残念です。 背景を少し見せるテクニック、非常に参考になりました。 もう一度挑戦してみます。m(__)m
- wildcat-yp
- ベストアンサー率37% (303/813)
何をアドバイスしてほしいのかわかりませんが、1つ。 考えているだけでは何も変わりませんよ。
お礼
ありがとうございました。 非常に参考になりました。 上記ソースを参考に勉強します。 重ねてありがとうございました。m(__)m
補足
すいません。 上記コードを実行したのですが、角のラインがどうしてもうまく描けません。 塗りつぶしは角丸になっているのですが、ラインが消えてしまいます。 アドバイスお願いします。m(__)m