Przesłanie zmiennej między klasami

Przesłanie zmiennej między klasami

Wątek przeniesiony 2017-10-08 18:37 z C# i .NET przez somekind.

D1
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 34
0

Witam,

Mam zmienną public

Kopiuj
public string projectName;

Lecz gdy przypisuję do niej wartość w kodzie.

Kopiuj
projectName = promptValue;

A następnie chcę wyświetlić jej wartość w innej klasie nie wyświetla się nic.

Kopiuj
  Form1 form1 = new Form1();

  string test = form1.projectName.ToString();

  MessageBox.Show(test.ToString());
  • Rejestracja: dni
  • Ostatnio: dni
0
Kopiuj
public string projectName {get; set;}
D1
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 34
0
Kopiuj
string promptValue = ShowDialog("Project name", "Project name", "New project");

A następnie

Kopiuj
projectName = promptValue;

A tu jest funkcja ShowDialog która zwraca stringa.

Kopiuj
  public static string ShowDialog(string text, string caption, string showText)
        {
            Form prompt = new Form()
            {
                Width = 500,
                Height = 150,
                FormBorderStyle = FormBorderStyle.FixedDialog,
                Text = caption,
                StartPosition = FormStartPosition.CenterScreen
            };

            Label textLabel = new Label() { Left = 50, Top = 20, Text = text };
            TextBox textBox = new TextBox() { Left = 50, Top = 50, Width = 400 };
            Button confirmation = new Button() { Text = "Ok", Left = 350, Width = 100, Top = 70, DialogResult = DialogResult.OK };

            confirmation.Click += (sender, e) => { prompt.Close(); };
            prompt.Controls.Add(textBox);
            prompt.Controls.Add(confirmation);
            prompt.Controls.Add(textLabel);
            prompt.AcceptButton = confirmation;

            textBox.Text = showText;

            return prompt.ShowDialog() == DialogResult.OK ? textBox.Text : "";
NeuroXiq
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Racibórz
  • Postów: 101
0
Dejvid12 napisał(a):
Kopiuj
public string projectName;

Lecz gdy przypisuję do niej wartość w kodzie.

Kopiuj
projectName = promptValue;

A następnie chcę wyświetlić jej wartość w innej klasie nie wyświetla się nic.

Kopiuj
  Form1 form1 = new Form1();

  string test = form1.projectName.ToString();
  // Ale gdzie jest tutaj jakieś przypisanie ? 
  // coś w form1 powinno zostać wywołane/pokazać okno gdzie można edytować wartości
 // bo póki co w tym momencie string ma domyślną wartość (czyli nic nie przechowuje) 
  MessageBox.Show(test.ToString());

U mnie wszystko działa normalnie. Szybki test:

screenshot-20171008185755.png

Skompilowałem normalnie, odpaliłem program, okno mi się wyświetliło a w konsoli pokazał się tekst który napisałem do Form'a.
Masz błąd gdzieś indziej bo ten dialog prawidłowo zwraca wpisanego stringa.

D1
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 34
0

Tu mam zmienną projectName.

Kopiuj

    public partial class Form1 : Form
    {
        public string projectName { get; set; }

Kopiuj
string promptValue = ShowDialog("Project name", "Project name", "New project");

A następnie

Kopiuj
projectName = promptValue;

A tu jest funkcja ShowDialog która zwraca stringa.

Kopiuj
  public static string ShowDialog(string text, string caption, string showText)
        {
            Form prompt = new Form()
            {
                Width = 500,
                Height = 150,
                FormBorderStyle = FormBorderStyle.FixedDialog,
                Text = caption,
                StartPosition = FormStartPosition.CenterScreen
            };

            Label textLabel = new Label() { Left = 50, Top = 20, Text = text };
            TextBox textBox = new TextBox() { Left = 50, Top = 50, Width = 400 };
            Button confirmation = new Button() { Text = "Ok", Left = 350, Width = 100, Top = 70, DialogResult = DialogResult.OK };

            confirmation.Click += (sender, e) => { prompt.Close(); };
            prompt.Controls.Add(textBox);
            prompt.Controls.Add(confirmation);
            prompt.Controls.Add(textLabel);
            prompt.AcceptButton = confirmation;

            textBox.Text = showText;

            return prompt.ShowDialog() == DialogResult.OK ? textBox.Text : "";

I teraz w tej klasie chcę skorzystać ze zmiennej projectName.

Kopiuj
class SaveProject
    {
        Form1 form1 = new Form1();

        public void saveProject(TabControl tabControl)
        {
            string test = form1.projectName ;

            MessageBox.Show(test);

I nie wyświetla się nic.

MrBean Bean
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 117
0
Kopiuj
Pen pen1 = new Pen(Color.Black);
  Pen pen2 = pen1;
  pen2.Color = Color.Blue;
  Console.WriteLine(pen1.Color);     //Jaki kolor tutaj będzię?? 
  Console.WriteLine(pen2.Color);   
kzkzg
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 935
1

Tworzysz nowy obiekt typu Form1, zamiast odwoływać sie do tego w którym zapisales wartość ProjectName.

Przesylac zmienna miedzy klasami mozesz przekazujac ją w konstruktorze. Mozesz tez przekazac cala referencje do Form1 jesli potrzebujesz.

somekind
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Wrocław
1

Programowania uczymy się najpierw w konsoli, żeby zrozumieć jak działają obiekty i jak się przekazuje dane między nimi, a potem się bierzemy za fikuśne kolorowe okienka.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.