2017-04-03 13 views
0

私はWinFormsを初めて使用しています.WindowsアプリケーションをWindows 10 Pro環境に展開する際に、この問題に関する専門家の助言が必要です。 FormBorderStyleがSizableToolWindow(またはその問題のFixedToolWindow)に設定されているダイアログフォームが、上の部分を除いてウィンドウのすべての面に枠線をペイントしていないことがわかります。ウィンドウ10のWinformフォーム境界の問題

FormBorderStyleをFixedSingleに設定されている
Border is seen when FormBorderStyle is set to FixedSingle

サンプル完全なコードは以下のとおりであるとき、FormBorderStyleが見られ
Border Issue when FormBorderStyle is set to SizableToolWindow

ボーダーをSizableToolWindowするように設定されている

国境問題:

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

     private void button1_Click(object sender, EventArgs e) 
     { 
      Form form = new Form(); 
      form.FormBorderStyle = FormBorderStyle.FixedSingle; 
      form.ShowDialog(); 
     } 
    } 

Windows 10の場合のように、この動作をオーバーライドできるソリューションはありますか?

EDIT:FormのControlBoxプロパティをfalseに設定すると、クライアントサイトのみが表示され、境界線は完全に表示されますが、キャプションバーは表示されません。

+0

FormBorderStyleがSizableToolWindowに設定されているときにマウスポインタをエッジに置くと、サイズ変更カーソルが表示されます –

+1

ツールウィンドウの表示方法ではありませんか? – EpicKip

+0

こんにちはEpicKip、ツールボックスは、最上部に最小化と最大化ボタンを持つべきではありませんが、アクティブなウィンドウの境界線は3つの側面(左、右、下)に来るべきです – Shanks

答えて

0

まあ、私は動作とレンダリングはオペレーティングシステムに依存していると私はあなたの質問に本当の答えはないと思うでしょう。

ただし、カスタムフォーム/ウィンドウを作成してツールウィンドウとして使用することも、必要に応じて使用することもできます。

まず、あなたは、あなたがのOnPaintメソッドをオーバーライドすることができ、結果は何だろう

protected override void OnPaint(PaintEventArgs e) 
     { 
      Rectangle borderRectangle = new Rectangle(1, 1, ClientRectangle.Width - 2, ClientRectangle.Height - 2); 

      e.Graphics.DrawRectangle(Pens.Blue, borderRectangle); 
      base.OnPaint(e); 
     } 

以下のコードのようにそこに境界線を引くなし

this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None; 

にFormBorderStyleを設定する必要があります下記の画像のように: enter image description here

giviのような他のものの世話をする必要がありますこのフォームを移動する能力を持っている場合は、カスタムの閉じるボタンなどを追加してください。

この作業が完了したら、このフォームを基本クラスとして使用して、今後のフォームクラスを継承できます。

そのカスタムフォームの完全なコードは次のようになります。

using System; 
using System.Drawing; 
using System.Windows.Forms; 

namespace CustomForm 
{ 
    public partial class CustomBorderForm : Form 
    { 
     public CustomBorderForm() 
     { 
      InitializeComponent(); 
     } 

     protected override void OnPaint(PaintEventArgs e) 
     { 
      Rectangle borderRectangle = new Rectangle(1, 1, ClientRectangle.Width - 2, ClientRectangle.Height - 2); 

      e.Graphics.DrawRectangle(Pens.Blue, borderRectangle); 
      base.OnPaint(e); 
     } 

     private void button1_Click(object sender, EventArgs e) 
     { 
      this.Close(); 
     } 
    } 
} 

私はこれが便利だった願っています。

+0

唯一の論理的なアプローチのようです。答えをありがとう – Shanks

関連する問題