Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Область видимости, Область видимости в С# 
:(
    Опции темы
tereres
Дата 21.4.2006, 10:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 10
Регистрация: 18.3.2006

Репутация: нет
Всего: нет



Проблема такая - обьявлен массив static int[,] c = new int[5,5]; в MainForm-е. Когда я заполняю его из TextBox-а в функции Button1Click то там он принимает значения которые я ему присваиваю - но когда он покидает функцию Button1Click - он опять обнуляется... почему? ведь он объявлен как static? 
PM MAIL   Вверх
Ignat
Дата 21.4.2006, 10:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Флудератор
****


Профиль
Группа: Экс. модератор
Сообщений: 4030
Регистрация: 19.4.2004
Где: غيليندزيك مدينة

Репутация: нет
Всего: 73



Ой что-то мне сдается, что работаешь ты с локальным массивом, а не статическим. Как передаешь его в функцию? 


--------------------
Теперь при чем :P
PM   Вверх
Illuminaty
Дата 21.4.2006, 10:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


/*Антон Захаров*/
***


Профиль
Группа: Комодератор
Сообщений: 1238
Регистрация: 19.3.2005
Где: Россия, Казань

Репутация: 1
Всего: 56



Ignat, зачем передавать static в качестве параметра?
Хотя, проблема, скорее всего, из-за этого.
Чтобы понять точнее, нужен код. tereres, выкладывай 
PM MAIL ICQ   Вверх
a.S.d
Дата 21.4.2006, 10:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 100
Регистрация: 20.2.2005

Репутация: нет
Всего: 2



tereres, 
Ты обьявляешь массив в функции Button1Click или в классе MainForm? 
PM MAIL   Вверх
ivashkanet
Дата 21.4.2006, 10:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодю потиху
****


Профиль
Группа: Участник Клуба
Сообщений: 3684
Регистрация: 23.2.2006
Где: Гомель, Беларусь

Репутация: 47
Всего: 149



Цитата(tereres @  21.4.2006,  10:20 Найти цитируемый пост)
static int[,] c = new int[5,5]

А где ты его объявляешь?

Если в функции, то при выходе из нее этот экземпляр исчезает, а так как прррр

Стоп стоп стоп.

Нельзя объявить static переменную, только класс или структуру smile 
Как ты умудрился????
Мой компилятор ругается  smile (можно посмотреть ниже)
 

Присоединённый файл ( Кол-во скачиваний: 6 )
Присоединённый файл  static.JPG 6,79 Kb
PM MAIL WWW ICQ   Вверх
Ignat
Дата 21.4.2006, 11:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Флудератор
****


Профиль
Группа: Экс. модератор
Сообщений: 4030
Регистрация: 19.4.2004
Где: غيليندزيك مدينة

Репутация: нет
Всего: 73



Цитата(Illuminaty @  21.4.2006,  11:45 Найти цитируемый пост)
зачем передавать static в качестве параметра?

static != global (!!!)

Статические объекты - объекты, которые имеют постоянный адрес в статической памяти. Но на области видимости это никак не отражается (практически).

Добавлено @ 11:03 
ivashkanet, static члены класса никто не отменял. 


--------------------
Теперь при чем :P
PM   Вверх
ivashkanet
Дата 21.4.2006, 11:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодю потиху
****


Профиль
Группа: Участник Клуба
Сообщений: 3684
Регистрация: 23.2.2006
Где: Гомель, Беларусь

Репутация: 47
Всего: 149



Добавка
Извините, если объявлять static свойство в классе, то оно нормально объявляется   smile 
Static нельзя объявлять локальную переменную в функции, что и понятно.

tereres, а зачем тебе именно статик-поле?
Используй обычное!
Ведь тебе, я надеюсь, не нужно создавать кучу одинаковых объектов с возможностью связи между собой?

Добавлено @ 11:08 
Цитата(Ignat @  21.4.2006,  11:01 Найти цитируемый пост)
ivashkanet, static члены класса никто не отменял. 

Тормазнул, в чем искренне раскаиваюсь  smile

Добавлено @ 11:12 
Цитата(Illuminaty @  21.4.2006,  10:45 Найти цитируемый пост)
нужен код. tereres, выкладывай 

Выкладывай код 
Цитата(tereres @  21.4.2006,  10:20 Найти цитируемый пост)
Button1Click
Ждем. 
PM MAIL WWW ICQ   Вверх
Illuminaty
Дата 21.4.2006, 11:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


/*Антон Захаров*/
***


Профиль
Группа: Комодератор
Сообщений: 1238
Регистрация: 19.3.2005
Где: Россия, Казань

Репутация: 1
Всего: 56



Ignat, к static можно обратиться ИмяКласса.СтатическоеПоле, а не передавать его в качестве параметра. Я про это написал. 
PM MAIL ICQ   Вверх
tereres
Дата 21.4.2006, 12:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 10
Регистрация: 18.3.2006

Репутация: нет
Всего: нет



static int[,] c = new int[5,5];  объявляю в Main. Вот код всей проги:
Код

using System;
using System.Drawing;
using System.Windows.Forms;
        
class min{
    public int minimum(ref int[,] k, int t)
    {   int mi=1;
        k[0,0]=k[1,0]=k[2,0]=k[3,0]=k[4,0]=0;
        int m=0;
        for(int ff=0; ff<4; ff++){
            if(k[t,ff]!=0){m=k[t,ff]; mi=m; }
        
        };

        
        for(int j=0; j<5; j++)
            if(m>k[t,j]&&(k[t,j]!=0)){
            m=k[t,j];
            mi=j;
        }
        k[0,mi]=k[1,mi]=k[2,mi]=k[3,mi]=k[4,mi]=0;
        return mi;
    }

};
        
namespace opit2
{
    
    public class MainForm : System.Windows.Forms.Form
    {   string town = "Tbilisi1";
        string town2 = "Erevan2";
        string town3 = "Baku3";
        string town4 = "Moscow4";
        string town5 = "Kiev5";
        
        int x,y,z,w;
        static int[,] c = new int[5,5];
        
        private System.Windows.Forms.Button button1;
        private System.Windows.Forms.TextBox textBox1;
        public MainForm()
        {
        
        
        InitializeComponent();
        Text = "Towns";
        BackColor = SystemColors.Window;
        ForeColor = SystemColors.WindowText;
        ResizeRedraw = true;
        
        }

        

        [STAThread]
        public static void Main()
        {
            Application.Run(new MainForm());
        }
        protected override void OnPaint(PaintEventArgs pea)
    {
            
        Graphics grfx = pea.Graphics;
        Pen pen = new Pen(ForeColor);
        
        Graphics str = pea.Graphics;
        
        
        int mx = ClientSize.Width / 2;
        int my = ClientSize.Height / 6;
        
        int x1=ClientSize.Width/6; int y1=ClientSize.Height/2;
        int x2=ClientSize.Width-ClientSize.Width/6; int y2=ClientSize.Height/2;
        int x3=ClientSize.Width/3; int y3=ClientSize.Height-ClientSize.Height/6;
        int x4=ClientSize.Width-ClientSize.Width/3; int y4=ClientSize.Height-ClientSize.Height/6;
        
        
        

        
        str.DrawString(town,Font,Brushes.Black, mx,my-10);
        str.DrawString(town2,Font,Brushes.Black, x1-10,y1);
        str.DrawString(town3,Font,Brushes.Black, x2+10,y2);
        str.DrawString(town4,Font,Brushes.Black, x3,y3+10);
        str.DrawString(town5,Font,Brushes.Black, x4,y4+10);

        min t = new min();

        int[] old = new int[5];

        old[0]=0;
        town +=c[0,0];
        town2+=c[1,0];
        town3+=c[2,0];
        town5+=c[4,0];
        town4+=c[3,0];
        
        for(int n=0; n<4; n++)
            old[n+1]=t.minimum(ref c, old[n]);
        
        
        for(int i=0; i<4; i++)
        {
        if(old[i]==0) {x=mx; y=my;};
        if(old[i]==1) {x=x1; y=y1;};
        if(old[i]==2) {x=x2; y=y2;};
        if(old[i]==3) {x=x3; y=y3;};
        if(old[i]==4) {x=x4; y=y4;};
        
        if(old[i+1]==0) {w=mx; z=my;};
        if(old[i+1]==1) {w=x1; z=y1;};
        if(old[i+1]==2) {w=x2; z=y2;};
        if(old[i+1]==3) {w=x3; z=y3;};
        if(old[i+1]==4) {w=x4; z=y4;};
        
        grfx.DrawLine(pen, x,y,w,z);
        }
        town +=c[0,0];
        town2+=c[1,0];
        town3+=c[2,0];
        town4+=c[3,0];
        town5+=c[4,0];

        
            //grfx.DrawLine(pen, 0, 0, ClientSize.Width - 1, ClientSize.Height - 1);
        

    }
        #region Windows Forms Designer generated code
        /// <summary>
        /// This method is required for Windows Forms designer support.
        /// Do not change the method contents inside the source code editor. The Forms designer might
        /// not be able to load this method if it was changed manually.
        /// </summary>
    private void InitializeComponent() {
            this.textBox1 = new System.Windows.Forms.TextBox();
            this.button1 = new System.Windows.Forms.Button();
            this.SuspendLayout();
            // 
            // textBox1
            // 
            this.textBox1.Location = new System.Drawing.Point(0, 0);
            this.textBox1.Name = "textBox1";
            this.textBox1.Size = new System.Drawing.Size(296, 20);
            this.textBox1.TabIndex = 1;
            this.textBox1.Text = "Enter the numerals";
            // 
            // button1
            // 
            this.button1.BackColor = System.Drawing.SystemColors.Desktop;
            this.button1.Location = new System.Drawing.Point(0, 24);
            this.button1.Name = "button1";
            this.button1.TabIndex = 0;
            this.button1.Text = "Click Here";
            this.button1.Click += new System.EventHandler(this.Button1Click);
            // 
            // MainForm
            // 
            this.AutoScaleBaseSize = new System.Drawing.Size(5, 13);
            this.ClientSize = new System.Drawing.Size(492, 453);
            this.Controls.Add(this.textBox1);
            this.Controls.Add(this.button1);
            this.Name = "MainForm";
            this.Text = "MainForm";
            this.ResumeLayout(false);
        }
        #endregion
         void Button1Click(object who, System.EventArgs e)
        {
            string a = textBox1.Text;
            
            
            
            int len = textBox1.Text.Length;
            int[] mass = new int[len];
            for (int i = 0; i < len; i++)
            {
             if(a[i]==','){
                 mass[i]=-1;}
             else mass[i] = Convert.ToInt32(a.Substring(i, 1)); 
            }
            int[] m = new int[25];
            
            int yyy=1;
         
            int hh=0;
            for(int ee=0; ee<25;){
             
             if(mass[hh]==-1) {yyy=1; ee++; hh++;}
             else
             {m[ee]=m[ee]*yyy+mass[hh]; yyy*=10; hh++;}
                       }
            
            for(int j=0; j<5; j++)
             for(int k=0; k<5; k++)
             c[j,k]=m[j+k];
            
    MainForm.ActiveForm.Refresh();
    
            
         }
        
        }

        
    }


 
PM MAIL   Вверх
ivashkanet
Дата 21.4.2006, 12:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодю потиху
****


Профиль
Группа: Участник Клуба
Сообщений: 3684
Регистрация: 23.2.2006
Где: Гомель, Беларусь

Репутация: 47
Всего: 149



tereres, ты б еще пол MSDN сюда накопипастил smile

Добавлено @ 13:03 
Да и вообще она у тебя какой-то ерундой занимается (см. прикрепленный файл). Открывает и консоль и форму  smile 

Давай по-существу:
1) как описываешь
2) как изменяешь
3) в каком месте, по-твоему, ошибка

  

Это сообщение отредактировал(а) ivashkanet - 21.4.2006, 13:03

Присоединённый файл ( Кол-во скачиваний: 8 )
Присоединённый файл  static2.JPG 77,36 Kb
PM MAIL WWW ICQ   Вверх
ivashkanet
Дата 21.4.2006, 13:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодю потиху
****


Профиль
Группа: Участник Клуба
Сообщений: 3684
Регистрация: 23.2.2006
Где: Гомель, Беларусь

Репутация: 47
Всего: 149



Ее даже оттестить нормально не получаеться!

tereres, в каком формате нужно вводить текстовую строку?
Через запятую, сколько штук?

Давай приводи ее в нормальный вид, который можно другим показать smile  
PM MAIL WWW ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема »


 




[ Время генерации скрипта: 0.0552 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.