2

フルスクリーン フォームがあり、Paint イベントのハンドラーで、フォーム全体に 2px の境界線を描画しています。コンピューターに接続された画面ごとに、これらのフォームの 1 つを作成します。何らかの理由で、上と左の境界線が非プライマリ モニターに描画されません。フォームの背景は画面全体をカバーしていますが、画面の上から約 3 ピクセル、左から 3 ピクセルの領域に (GDI を使用して) 描画することはできません。

私のペイントイベントハンドラーコードは以下のとおりです。

private void OnPaint(object sender, PaintEventArgs e)
    {
        using (Graphics g = this.CreateGraphics())
        {
            int border = 2;
            int startPos = 0;
            // offset used to correctly paint all the way to the right and bottom edges
            int offset = 1;
            Rectangle rect = new Rectangle(startPos, startPos, this.Width - border + offset, this.Height - border + offset);
            Pen pen = new Pen(Color.Red, border);

            // draw a border 
            g.DrawRectangle(pen, rect);
        }
    }

誰もこれを見たことがありますか?

4

1 に答える 1

1

あなたのコードは正しく動作します。this.Widthまたはをいつ使用するかを知っておく必要がありますthis.Height。これらの値は、フォームを囲むフレームで計算されます。高さについては、フォーム コントロールの高さが計算された高さに追加されます。このコードを使用できます:

using (Graphics g = this.CreateGraphics())
            {
                int border = 2;
                int startPos = 0;
                // offset used to correctly paint all the way to the right and bottom edges
                int offset = 1;
                Rectangle rect = new Rectangle(startPos, startPos, this.Width-20, this.Height-40);
                Pen pen = new Pen(Color.Red, border);

                // draw a border 
                g.DrawRectangle(pen, rect);
            }

アップデート :

正確なサイズを計算したい場合は、次のコードを使用できます。

 int width,height;
    public Form1()
    {
        InitializeComponent();
        PictureBox pc = new PictureBox();
        pc.Dock = DockStyle.Fill;
        this.Controls.Add(pc);
        pc.Visible = false;
        width = pc.Width;
        height = pc.Height;
        pc.Dispose();
    }
    private void Form1_Paint(object sender, PaintEventArgs e)
    {


        using (Graphics g = this.CreateGraphics())
        {
            int border = 2;
            int startPos = 0;
            // offset used to correctly paint all the way to the right and bottom edges
            int offset = 1;
            Rectangle rect = new Rectangle(startPos, startPos, width,height);
            Pen pen = new Pen(Color.Red, border);

            // draw a border 
            g.DrawRectangle(pen, rect);
        }

    }
于 2013-09-23T19:35:09.213 に答える