2017-05-20 29 views
-1

我想更改對象的寬度,具體取決於用戶爲我的Visual Studio窗體創建窗口的大小。我的代碼是:如何訪問表單的寬度

webBrowser1.Width = Form1.Width - 42; 

和Visual Studio說「一個對象引用是所必需的非靜態字段,方法或屬性」

+0

Form1是一個類型,而不是像webBrowser1這樣的變量。當然你的意思是'this.ClientSize.Width' –

+0

謝謝!錯誤消失了!我只是不知道該把代碼放在哪裏。 –

回答

0

WidthForm1類的一個實例成員。所以,你可以使用一個Form1實例這樣稱呼它:

Form1 myForm = new Form1(); 
var newWidth1 = myForm.Width - 42 // Calling instance member from an instance - Correct 
var newWidth2 = Form1.Width - 42 // Calling instance member from a class - Incorrect 
+0

我看不到如何執行此 –

0

表格的寬度不是形式的靜態成員,所以你必須通過表單的實例來調用它。所以你實際上需要你的表單的對象來訪問寬度。這是合乎邏輯的,因爲您可以創建具有不同大小的多個窗體實例。


對於實現:

你的形式在程序的某個時候開始。所以,你可能已經寫爲:

new Form1().Show(); 

,或者如果形式是它在Program.cs開始WinForms應用程序的啓動方式:

Application.Run(new Form1()); 

你可以做的是保存實例

var yourForm = new Form1(); 
yourForm.Show(); 

現在你可以訪問表格寬度:

在一個變量形式

另一種可能性是保存寬度靜態屬性在您的形式:

public partial class Form1 : Form 
{ 
    public static int UniversalWidth; 
    protected override void OnSizeChanged(EventArgs e) 
    { 
     base.OnSizeChanged(e); 
     UniversalWidth = Width; 
    } 
//... 

現在,你可以通過UniversalWidth實地訪問寬度:

webBrowser1.Width = Form1.UniversalWidth; 

然而,我不推薦使用它,因爲如果您打開窗體的多個窗口,它將不起作用。


因爲我不知道你的整個項目,所以代碼實際上可能寫在你的Form1類中。然後,你當然可以訪問寬度這樣的:

webBrowser1.Width = this.Width; 

或者,如果你想從另一個類訪問的大小,你可以通過構造給這個班的形式:

var otherClass = new yourOtherClass (this); 

然後其他類的構造函數看起來是這樣的:

public yourOtherClass (Form1 yourForm) 
{ 
    webBrowser1.Width = yourForm.Width; 
} 

爲了得到更精確的信息,請p提供更精確的信息。

+0

@JacobBates是否幫助您?如果它解決了您的問題,請不要忘記將其標記爲答案,因爲這有助於您和更廣泛的社區找到解決的問題。 – MetaColon