none
Постепенное увеличение окна RRS feed

  • Вопрос

  • как можно это сделать ? исходный размер окна   550 ,550, при определенном действии размер окна равняется например 1000, 1000, как сделать чтобы этот процесс был постепенным?
    Я хочу стать программистом
    • Перемещено Abolmasov Dmitry 9 декабря 2010 г. 11:56 (От:Настольные ПК)
    9 декабря 2010 г. 11:30

Ответы

  • Работу с элементами управления нужно выполнять в том потоке, в котором они созданы, т.е. в главном.

    Class MainWindow 
      WithEvents timer1 As Timers.Timer = New Timers.Timer
      Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.Windows.RoutedEventArgs) Handles Button1.Click
        timer1.Interval = 10
        timer1.Start()
      End Sub
    
      Private Sub timer1_Elapsed(ByVal sender As Object, ByVal e As System.Timers.ElapsedEventArgs) Handles timer1.Elapsed
        Dispatcher.Invoke(New Action(Sub()
                         If (Me.Width < 1000) Then
                           Me.Height += 10
                           Me.Width += 10
                         End If
                       End Sub))
      End Sub
    End Class
    
    

     

    Посмотрите также Модель потоков

     


    Для связи [mail]
    • Помечено в качестве ответа Program-s.g 11 января 2011 г. 10:52
    11 января 2011 г. 10:48

Все ответы

  • Program-s.g , вы задаете вопрос не в том разделе, вопросы, касающиеся разработки на c# (vb.net) с использованием wpf, winform задаются в другом разделе Настольные ПК . В следующий раз, пожалуйста, задавайте вопрос там.

    Для связи [mail]
    9 декабря 2010 г. 11:56
  • извините за неудобства, 
    Я хочу стать программистом
    9 декабря 2010 г. 12:07
  • winforms:

     

    private System.Threading.Thread thread;
    
    public Form1()
    {
      InitializeComponent();
    }
    
    private void button1_Click(object sender, EventArgs e)
    {
      Point pt = new Point(550, 550);
      this.Size = new Size(pt);
    
      thread = new System.Threading.Thread(new System.Threading.ThreadStart(delegate()
        {
          while (pt.X <= 1000 || pt.Y <= 1000)
          {
            this.Invoke(new Action(delegate()
              {
                pt.X++;
                pt.Y++;
                this.Size = new Size(pt);
              }));
            System.Threading.Thread.Sleep(10);
          }
        }));
      thread.Start();
    }
    
    protected override void DestroyHandle()
    {
      if (thread != null && thread.IsAlive)
        thread.Abort();
      base.DestroyHandle();
    }
    


    wpf:

     

    private System.Threading.Thread thread;
    
    public MainWindow()
    {
      InitializeComponent();
    }
    
    private void button1_Click(object sender, EventArgs e)
    {
      Point pt = new Point(550, 550);
      this.Width = pt.X;
      this.Height = pt.Y;
    
      thread = new System.Threading.Thread(new System.Threading.ThreadStart(delegate()
      {
        while (pt.X <= 1000 || pt.Y <= 1000)
        {
          this.Dispatcher.Invoke(new Action(delegate()
          {
            pt.X++;
            pt.Y++;
            this.Width = pt.X;
            this.Height = pt.Y;
          }));
          System.Threading.Thread.Sleep(10);
        }
      }));
      thread.Start();
    }
    
    protected override void OnClosed(EventArgs e)
    {
      if (thread != null && thread.IsAlive)
        thread.Abort();
      base.OnClosed(e);
    }
    

     

    • Помечено в качестве ответа Abolmasov Dmitry 10 декабря 2010 г. 7:34
    • Снята пометка об ответе Program-s.g 11 января 2011 г. 9:42
    9 декабря 2010 г. 17:08
  • Ну, или поставь таймер и впиши в нем:

    if (this.width<1000)

    {

    this.height += 10;

    this.width +=10;

    }

    Время таймера и значения для увеличения подбирай по вкусу.

    • Помечено в качестве ответа Abolmasov Dmitry 10 декабря 2010 г. 7:34
    • Снята пометка об ответе Program-s.g 11 января 2011 г. 9:42
    9 декабря 2010 г. 17:32
  • Ну, или поставь таймер и впиши в нем:

     

    а как в wpf добавить таймер?
    Я хочу стать программистом
    9 декабря 2010 г. 17:38
  •   WithEvents timer1 As Timers.Timer = New Timers.Timer
      Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.Windows.RoutedEventArgs) Handles Button1.Click
        timer1.Interval = 100
        timer1.Start()
      End Sub
    
      Private Sub timer1_Elapsed(ByVal sender As Object, ByVal e As System.Timers.ElapsedEventArgs) Handles timer1.Elapsed
        MessageBox.Show("timer")
      End Sub
    End Class
    
    

    Для связи [mail]
    • Помечено в качестве ответа Program-s.g 10 декабря 2010 г. 7:29
    • Снята пометка об ответе Program-s.g 11 января 2011 г. 9:42
    10 декабря 2010 г. 7:23
  • Добрый день! где ошибка? 
     WithEvents timer1 As Timers.Timer = New Timers.Timer
      Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.Windows.RoutedEventArgs) Handles Button1.Click
        timer1.Interval = 100
        timer1.Start()
      End Sub
    
    
      Private Sub timer1_Elapsed(ByVal sender As Object, ByVal e As System.Timers.ElapsedEventArgs) Handles timer1.Elapsed
        If (Me.Width < 1000) Then
    
    
    
    
    
          Me.Height += 10
    
          Me.Width += 10
    
        End If
    


    Я хочу стать программистом
    11 января 2011 г. 9:44
  • Работу с элементами управления нужно выполнять в том потоке, в котором они созданы, т.е. в главном.

    Class MainWindow 
      WithEvents timer1 As Timers.Timer = New Timers.Timer
      Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.Windows.RoutedEventArgs) Handles Button1.Click
        timer1.Interval = 10
        timer1.Start()
      End Sub
    
      Private Sub timer1_Elapsed(ByVal sender As Object, ByVal e As System.Timers.ElapsedEventArgs) Handles timer1.Elapsed
        Dispatcher.Invoke(New Action(Sub()
                         If (Me.Width < 1000) Then
                           Me.Height += 10
                           Me.Width += 10
                         End If
                       End Sub))
      End Sub
    End Class
    
    

     

    Посмотрите также Модель потоков

     


    Для связи [mail]
    • Помечено в качестве ответа Program-s.g 11 января 2011 г. 10:52
    11 января 2011 г. 10:48