7

単純な Windows フォームで、グループ ボックス内に線を引くことができません。

ここに私のコードがあります:

public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();                        
        }

        protected override void OnPaint(PaintEventArgs e)
        {
            base.OnPaint(e);            
            DrawLShapeLine(groupBox1.CreateGraphics(), 10, 10, 20, 40);
        }

        public void DrawLShapeLine(System.Drawing.Graphics g, int intMarginLeft, int intMarginTop, int intWidth, int intHeight)
        {
            Pen myPen = new Pen(Color.Black);
            myPen.Width = 2;
            // Create array of points that define lines to draw.
            int marginleft = intMarginLeft;
            int marginTop = intMarginTop;
            int width = intWidth;
            int height = intHeight;
            int arrowSize = 3;
            Point[] points =
             {
                new Point(marginleft, marginTop),
                new Point(marginleft, height + marginTop),
                new Point(marginleft + width, marginTop + height),
                // Arrow
                new Point(marginleft + width - arrowSize, marginTop + height - arrowSize),
                new Point(marginleft + width - arrowSize, marginTop + height + arrowSize),
                new Point(marginleft + width, marginTop + height)
             };

            g.DrawLines(myPen, points);
        }
    }

DrawLShapeLine メソッドをボタン クリック イベントにアタッチすると、うまく描画されますが、フォームの読み込み時に描画されません。

ご意見をお聞かせください。

4

6 に答える 6

26

クイック&ダーティ:

幅1ピクセルのパネルを作成し、背景色を付けてみませんか?

于 2009-07-03T07:30:20.637 に答える
4

Paintのイベントのイベント ハンドラーをフックし、そのイベント ハンドラー内からGroupBox呼び出しDrawLShapeLineます。Graphics次に、イベント引数で提供されるオブジェクトを使用する必要があります。

private void groupBox1_Paint(object sender, PaintEventArgs e)
{
    DrawLShapeLine(e.Graphics, 10, 10, 20, 40);
}

あなたのコードが今見えるようGroupBoxに、フォームが描画を必要とするときに描画を試みます。グループ ボックスは、別の機会にペイントすることができます。その場合、ペイントした線は消えます。

于 2009-07-03T07:22:59.540 に答える
4

もう 1 つのオプションは、Visual Basic Power Pack で使用できる行コントロールを使用することです。

http://social.msdn.microsoft.com/Forums/en-US/csharpgeneral/thread/d9e082c8-5386-4481-a744-1c9029805696/

Visual Studio 2008 SP1 または Visual Studio 2010 を使用している場合は、何もダウンロードする必要はありません。

ツールボックスに Visual Basic PowerPacks コントロールが表示されない場合は、ツールボックスを右クリックし、コンテキスト メニューで [すべて表示] を選択します。

于 2012-04-05T22:47:43.727 に答える
2

テキストなし、3D ボーダー、高さ 2 のラベルを追加します (GUI ではなく、プロパティ ページで高さを設定する必要があります)。

于 2013-01-18T21:45:28.980 に答える
0

他に何かが起こっているかどうかはわかりませんがGroupBox、'sではなく'sPaintイベントに線を引く必要がありますForm

于 2009-07-03T07:24:09.320 に答える