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

Przesłanie zmiennej między klasami

0

Witam,

Mam zmienną public

public string projectName;

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

projectName = promptValue;

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

  Form1 form1 = new Form1();

  string test = form1.projectName.ToString();

  MessageBox.Show(test.ToString());
0
public string projectName {get; set;}
0
string promptValue = ShowDialog("Project name", "Project name", "New project");

A następnie

projectName = promptValue;

A tu jest funkcja ShowDialog która zwraca stringa.

  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 : "";
0
Dejvid12 napisał(a):
public string projectName;

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

projectName = promptValue;

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

  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.

0

Tu mam zmienną projectName.


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

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

A następnie

projectName = promptValue;

A tu jest funkcja ShowDialog która zwraca stringa.

  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.

class SaveProject
    {
        Form1 form1 = new Form1();

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

            MessageBox.Show(test);

I nie wyświetla się nic.

0
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);   
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.

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.

1 użytkowników online, w tym zalogowanych: 0, gości: 1