2016-04-03 39 views
-2

Değişken değişmeyen bir genel yöntemde bir değişkenle ilgili bir sorunum var. Yöntem, değişkeni değiştiren bit dışında her şeyi yürütür. (C# yöntemi, genel değişkeni değiştirmiyor

namespace Multi_tool 
{ 
    public partial class inmForm : Form 
    { 
     public inmForm() 
     { 
      InitializeComponent(); 
     } 

     private void inmForm_Load(object sender, EventArgs e) 
     { 
      startForm startForm = new startForm(); 

      lblQuantity.Text = startForm.quantity; 
      lblUnit.Text = startForm.unit; 
     } 

It inmForm: ben bu koduna sahip başka formda

 private void btnVelocity_Click(object sender, EventArgs e) 
     { 
      startInmForm("Velocity", "m/s"); 
     } 

: Ben yöntemini çağırın Daha Sonra

namespace Multi_tool 
{ 
    public partial class startForm : Form 
    { 
     public string quantity; 
     public string value; 
     public string unit; 

     public void startInmForm(string _quantity,string _unit) 
     { 
      //Here I think something is wrong 
      quantity = _quantity; 
      unit = _unit; 

      inmForm inmForm = new inmForm(); 
      inmForm.ShowDialog(); 
     } 

:

Bu benim ana formda) iki etiketli bir form ve ortada bir metin kutusu ve metin kutusuna bir değer yazılmalıdır. Etiketler "Hız" ve "m/s" metinlerine sahip olmalı, ancak bunlar boş. Neden?

Bildirimi bildirdiğimde quantity veya unit'a metin atarsam, bu metin ikinci formdaki etikette görüntülenir (inmForm).

Yardım için çok teşekkürler!

+0

Gerçekten çalışıp çalışmadığını görmek için yönteminize bir kesme noktası yerleştirdiniz mi? Ve sadece FYI, değişken adından önce bir '_' yerleştirmek genellikle C# 'daki global bir değişkeni belirtmek için kullanılır. Bir parametre adıyla karıştırmış olabilirsiniz. – Tdorno

+0

@Tdorno Evet, yöntem inmForm açıldığı için çalışır. Tek sorunum, yöntemin yeni değerleri geçmeyeceğidir. Ps. Ben c için oldukça yeniyim, bu yüzden şimdi tüm küçük kurallar yok, ama bilgi için teşekkürler! –

cevap

1

new startForm()'u yaptığınızda, yeni bir örnek oluşturur ve varolanı kullanmazsınız. ShowDialog çağrılmadan önce startForm'dan inmForm'a parametreler göndermeniz gerekir. , Değerler

private void inmForm_Load(object sender, EventArgs e) 
    { 
     startForm startForm = new startForm(); 

     lblQuantity.Text = startForm.quantity; 
     lblUnit.Text = startForm.unit; 
    } 

Bir formu başlatmasını ve hemen bir metin değerleri ayarlanır: (Mülkiyet veya constuctor) startInmForm içinde

public partial class inmForm : Form 
{ 
    private startForm _startForm; 
    public inmForm(startForm startForm) 
    { 
     _startForm = startForm; 
     InitializeComponent(); 
    } 

    private void inmForm_Load(object sender, EventArgs e) 
    { 
     lblQuantity.Text = _startForm.quantity; 
     lblUnit.Text = _startForm.unit; 
    } 
} 

public void startInmForm(string _quantity,string _unit) 
{ 
    //Here I think something is wrong 
    quantity = _quantity; 
    unit = _unit; 

    inmForm inmForm = new inmForm(this); 
    inmForm.ShowDialog(); 
} 
0

Bu sorun şu anda hala boş.

mesela bu deneyin:

private void inmForm_Load(object sender, EventArgs e) 
    { 
     startForm startForm = new startForm(); 
     startForm.startInmForm("Velocity", "m/s"); 
     lblQuantity.Text = startForm.quantity; 
     lblUnit.Text = startForm.unit; 
    } 

Bir not olarak. Sınıflarınızı bir sermaye ile adlandırmaya çalışın. Bu, sınıflar ve değişkenler arasında ayrım yapmayı kolaylaştırır.

+0

Yardımlarınız için teşekkür ederiz. Ancak önerdiğiniz satırın eklenmesi, 'inmForm.ShowDialog();' adlı ek bilgilerle "Windowrefable yapamama" özelliğine sahip bir 'System.ComponentModel.Win32Exception' verir. 'startInmForm' içinde. –