none
Выполнение расчетов между формами RRS feed

  • Вопрос

  • Здравствуйте товарищи программисты.
    У меня вопрос, возможно глупый но все же:
    У меня есть форма Form1 и некая button и textbox. есть форма stat на которой размещен listbox в котором список чисел (целых). Задача:
    Необходимо чтобы при клике по button выполнялось сложение всех чисел в listbox. А результат сохранялся в переменной типа long.
    Спасибо.
    • Перемещено SachinW 1 октября 2010 г. 22:17 MSDN Forums Consolidation (От:Начинающие разработчики)

Ответы

  •       // Где-то в Form1
          start s = new start();
          s.CountComlited += new start.CountDelegate(s_CountComlited);
          s.ShowDialog();
    
        //Сам обработчик события 
        void s_CountComlited(double result)
        {
          MessageBox.Show(result.ToString());
        }
      // а это уже в start
      public partial class start : Form
      {
        public delegate void CountDelegate(double result);
        public event CountDelegate CountComlited;
    
    //skip всякая лабуда 
    
        //Обрабатываем нажатие кнопки, для расчетов
        private void button1_Click(object sender, EventArgs e)
        {
          double _res = 0;
          //Тут идут сложные рассчеты 
          _res = 0.5;
          // отрабатываем событие
          this.CountComlited(_res);
        }
      }
    • Помечено в качестве ответа I.Vorontsov 19 мая 2010 г. 11:10
    Модератор

Все ответы

  • А результат должен храниться в Form1 или start?

    Start создается из From1, как я понимаю?

    • Помечено в качестве ответа mr_arti 18 мая 2010 г. 19:20
    • Снята пометка об ответе mr_arti 18 мая 2010 г. 19:20
    Модератор
  • Да Вы правы Stat создается из form1. Результат вычислений храниться в Form1. Но в форме Stat хранятся исходные значение над которыми надо совершать действия.
  • В форме start создаешь событие, допустим CountComlited, в качестве аргумента в обработчик которого передается полученная сумма;

    В форме start, после нажатия на кнопу и окончания расчетов вызываешь срабатывание события.

    В форме Form1 подписываешься на событие CountComlited у созданного экземпляра start .

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

     

     

    Модератор
  • Уважаемый Ulcer не могли бы Вы написать кусочек кода как это осуществить. Я токо учусь и не могу найти не в google и на других сайтах.

    Буду очень благодарен.

    Заранее спасибо.

  •       // Где-то в Form1
          start s = new start();
          s.CountComlited += new start.CountDelegate(s_CountComlited);
          s.ShowDialog();
    
        //Сам обработчик события 
        void s_CountComlited(double result)
        {
          MessageBox.Show(result.ToString());
        }
      // а это уже в start
      public partial class start : Form
      {
        public delegate void CountDelegate(double result);
        public event CountDelegate CountComlited;
    
    //skip всякая лабуда 
    
        //Обрабатываем нажатие кнопки, для расчетов
        private void button1_Click(object sender, EventArgs e)
        {
          double _res = 0;
          //Тут идут сложные рассчеты 
          _res = 0.5;
          // отрабатываем событие
          this.CountComlited(_res);
        }
      }
    • Помечено в качестве ответа I.Vorontsov 19 мая 2010 г. 11:10
    Модератор
  •    // Где-то в Form1
       start s = new start();
       s.CountComlited += new start.CountDelegate(s_CountComlited);
       s.ShowDialog();
    
      //Сам обработчик события 
      void s_CountComlited(double result)
      {
       MessageBox.Show(result.ToString());
      }
     // а это уже в start
     public partial class start : Form
     {
      public delegate void CountDelegate(double result);
      public event CountDelegate CountComlited;
    
    //skip всякая лабуда 
    
      //Обрабатываем нажатие кнопки, для расчетов
      private void button1_Click(object sender, EventArgs e)
      {
       double _res = 0;
       //Тут идут сложные рассчеты 
       _res = 0.5;
       // отрабатываем событие
       this.CountComlited(_res);
      }
     }
    
    я приношу свои извинения но как этот код перевести на VB.NET прога пишется в 2005 студии. А в С я ноль к сожалению. 
  • У меня VB нигде не установлен.

    Могу только посоветовать попробовать вот такую штуку http://www.developerfusion.com/tools/convert/csharp-to-vb/

    Вроде кусками если скармливать, то конвертирует.

    Модератор
  • Благодарю, но возник один вопрос что такое CountComlited после перевода это выражение так и осталось а Basic.NET отказывается  понимать пишет

    Error 1 'CountComlited' is not an event of 'CalX.start'. C:\Documents and Settings\Admin\Мои документы\Артур\CalX\Копия CalX [beta] ver 0.28 build 033\Project\Form1.vb 991 22 Calx

    Error 2 'CountComlited' is not a member of 'CalX.Form1'. C:\Documents and Settings\Admin\Мои документы\Артур\CalX\Копия CalX [beta] ver 0.28 build 033\Project\Form1.vb 1036 9 Calx

    а в отладчике вот такая вещь: Что можно сделать или заменить этот CountComlited

    ------ Build started: Project: Calx, Configuration: Debug Any CPU ------
    C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\Vbc.exe /noconfig /imports:Microsoft.VisualBasic,System,System.Collections,System.Collections.Generic,System.Data,System.Drawing,System.Diagnostics,System.Windows.Forms /nowarn:42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 /rootnamespace:CalX /doc:obj\Debug\CalX.xml /define:"CONFIG=\"Debug\",DEBUG=-1,TRACE=-1,_MyType=\"WindowsForms\",PLATFORM=\"AnyCPU\"" /reference:C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\System.Data.dll,C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\System.Deployment.dll,C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\System.dll,C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\System.Drawing.dll,C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\System.Windows.Forms.dll,C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\System.Xml.dll /main:CalX.My.MyApplication /debug+ /debug:full /out:obj\Debug\CalX.exe /resource:obj\Debug\CalX.AboutB.resources /resource:obj\Debug\CalX.Form2.resources /resource:obj\Debug\CalX.Form1.resources /resource:obj\Debug\CalX.Resources.resources /target:winexe /win32icon:Resources\calculator.ico AboutB.Designer.vb AboutB.vb Form2.Designer.vb Form2.vb Form1.vb Form1.Designer.vb "My Project\AssemblyInfo.vb" "My Project\Application.Designer.vb" "My Project\Resources.Designer.vb" "My Project\Settings.Designer.vb"
    C:\Documents and Settings\Admin\Мои документы\Артур\CalX\Копия CalX [beta] ver 0.28 build 033\Project\Form1.vb(991) : error BC30676: 'CountComlited' is not an event of 'CalX.Form2'.
    C:\Documents and Settings\Admin\Мои документы\Артур\CalX\Копия CalX [beta] ver 0.28 build 033\Project\Form1.vb(1036) : error BC30456: 'CountComlited' is not a member of 'CalX.Form1'.
    ========== Build: 0 succeeded or up-to-date, 1 failed, 0 skipped ========== 

  • CountComlited - это событие формы. На VB это должно выгядеть как-то так Public Event CountComlited As CountDelegate
    Модератор