Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Общие вопросы по .NET и C# > помогите! не видна переменная в Form1.cs


Автор: newerwinter 13.10.2011, 11:37
Здравствуйте, столкнулся вот с такой проблемой, по идее она не сложная, но выход не могу найти уже 2 суток, все перепробовал.Итак, теперь подробней.
Задача заключается: я ввожу с командной строки следущее ... (С:\Program.exe 3) т.е 3 это параметр(как я понимаю) и при открытии формы я хочу чтобы этот параметр передавался в Label1. text что для этого сделал я: 
Код

using System;
using System.Collections.Generic;
using System.Windows.Forms;

namespace WindowsFormsApplication1
{
    public static class Program
    {
        /// <summary>
        /// Главная точка входа для приложения.
        /// </summary>
       
        [STAThread]
  
        static void Main(string[] args)
        {
            for (int i = 0; i < args.Length;i++)
            {
                MessageBox.Show(args[i]);
//тут работает все хорошо
               
            }
                                    
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            Application.Run(new Form1());
        }
    }
}
  
Код

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;

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

        private void Form1_Load(object sender, EventArgs e)
        {
            label1.Text = program.args[i]
                
                    //и вот тут у меня ничего не работает
            

        }
    }
}


я пробовал также присваивать Label1 свойство public и internal в Form1.Designer.cs
что мне делать? где я копаю не там, я читал разделы про глобальные переменные но такого не нашел,заранее благодарен

Автор: MasterOfCode 13.10.2011, 11:51
Конечно не будет работать, переменную i он не видит.
Код

label1.Text = program.args[i]

Ну и знак ; нужно ставить.



Автор: newerwinter 13.10.2011, 11:57
Цитата(MasterOfCode @ 13.10.2011,  11:51)
Конечно не будет работать, переменную i он не видит.
Код

label1.Text = program.args[i]

Ну и знак ; нужно ставить.

не работает, я уже и без i пытался запустить, эффект тот же )
Код

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;

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

        private void Form1_Load(object sender, EventArgs e)
        {
            label1.Text = program.args[0];
// где 0 это и есть наш входной параметр(цифра 3) первый по списку
               
            

        }
    }
}


он не то то i, он args не видит 

Автор: MasterOfCode 13.10.2011, 12:21
А, и в классе program создай public переменную args, и на этапе запуска ее инициализируй.

Автор: newerwinter 13.10.2011, 12:31
Цитата(MasterOfCode @ 13.10.2011,  12:21)
А, и в классе program создай public переменную args, и на этапе запуска ее инициализируй.

хорошо, но снова какие то кастыли...
Код

using System;
using System.Collections.Generic;
using System.Windows.Forms;

namespace WindowsFormsApplication1
{
    
    

    public  class Program
    {
       
        /// <summary>
        /// Главная точка входа для приложения.
        /// </summary>
        [STAThread]
        public string[] args;
        static void Main(args[])
        {
            for (int i = 0; i < args.Length;i++)
            {
                MessageBox.Show(args[i]);
                
               
            }
                                    
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            Application.Run(new Form1());
        }
       
    }
       
}
  

не работает...(
1. в функции Main не обнаруживается args
2. в Form1. cs args также не виден
3.а при компиляции этого кода возникает ошибка "Требуется идентификатор"    

Автор: MasterOfCode 13.10.2011, 12:52
Код

using System;
using System.Collections.Generic;
using System.Windows.Forms;
namespace WindowsFormsApplication1
{
    
    
    public  class Program
    {
       
        /// <summary>
        /// Главная точка входа для приложения.
        /// </summary>
        [STAThread]
        public string[] args;
        static void Main(string[] args)
        {
            this.args = args;
            for (int i = 0; i < args.Length;i++)
            {
                MessageBox.Show(args[i]);
                
               
            }
                                    
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            Application.Run(new Form1());
        }
       
    }
       
}
  


Мы конечно можем сейчас долго тут разбирать неправильный синтаксис и ни чему не научимся. Лучше открой книгу, того же Рихтера и прочитай про переменные. 

Автор: newerwinter 13.10.2011, 13:07
Цитата(MasterOfCode @ 13.10.2011,  12:52)
Код

using System;
using System.Collections.Generic;
using System.Windows.Forms;
namespace WindowsFormsApplication1
{
    
    
    public  class Program
    {
       
        /// <summary>
        /// Главная точка входа для приложения.
        /// </summary>
        [STAThread]
        public string[] args;
        static void Main(string[] args)
        {
            this.args = args;
            for (int i = 0; i < args.Length;i++)
            {
                MessageBox.Show(args[i]);
                
               
            }
                                    
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            Application.Run(new Form1());
        }
       
    }
       
}
  


Мы конечно можем сейчас долго тут разбирать неправильный синтаксис и ни чему не научимся. Лучше открой книгу, того же Рихтера и прочитай про переменные.

Ошибка    1    Атрибут "STAThread" не допускается для этого типа объявления. Он допустим только для объявлений "method".    C:\Documents and Settings\Admin\Рабочий стол\WindowsFormsApplication1\WindowsFormsApplication1\Program.cs    14    10    WindowsFormsApplication1
Ошибка    2    Ключевое слово "this" не может использоваться в инициализаторах статических свойств, методов или полей    C:\Documents and Settings\Admin\Рабочий стол\WindowsFormsApplication1\WindowsFormsApplication1\Program.cs    18    13    WindowsFormsApplication1

кто поможет разобраться с данной проблемой разбогатеет на 5 wmz!

Автор: MasterOfCode 13.10.2011, 13:09
public string[] args;
Перемести выше [STAThread]

Автор: newerwinter 13.10.2011, 13:12
Цитата(MasterOfCode @ 13.10.2011,  13:09)
public string[] args;
Перемести выше [STAThread]

Код

using System;
using System.Collections.Generic;
using System.Windows.Forms;
namespace WindowsFormsApplication1
{


    public class Program
    {

        /// <summary>
        /// Главная точка входа для приложения.
        /// </summary>
        public string[] args;
        [STAThread]
        static void Main(string[] args)
        {
            this.args = args;
            for (int i = 0; i < args.Length; i++)
            {
                MessageBox.Show(args[i]);


            }
            
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            Application.Run(new Form1());
        }

    }

}

Ошибка    1    Ключевое слово "this" не может использоваться в инициализаторах статических свойств, методов или полей    C:\Documents and Settings\Admin\Рабочий стол\WindowsFormsApplication1\WindowsFormsApplication1\Program.cs    18    13    WindowsFormsApplication1

Автор: newerwinter 13.10.2011, 16:07
проблема решена!

Автор: Экскалупатор 13.10.2011, 16:45
newerwinter, в чем твоя проблема? в ветке для новичков есть прикрепленная тема: http://forum.vingrad.ru/forum/topic-52713.html. формы это те же классы. создай там метод и передай в него свои аргументы, или можно прямо в конструктор передать и в форме их обработать. не надо никаких ГЛОБАЛЬНЫХ переменных.

Автор: Biniproob 5.12.2022, 14:30
Модератор: Сообщение скрыто.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)