Skocz do zawartości

Po zakończeniu progressbar przycisk staje się aktywny/klikalny


Pan Inwestor

Rekomendowane odpowiedzi

Witam.

Nie mam za dużego doświadczenia w programowaniu, posiłkuję się raczej YT ale na jedną rzecz nie mogę znaleźć odpowiedzi:

Mam progressbar i chciałbym, aby po dojściu do jego końca pod spodem pojawił się (bądź zrobił aktywny) przycisk do przejścia do kolejnego formularza.

Czy jest to do wykonania? Programuję w Visual Studio 2017 (C#).

Próbowałem z funkcją 'if' oraz 'then' ale to chyba ze starszych wersji i tutaj nie działa :-(

Pozdrawiam

iwi.pl - blog o inwestowaniu przez internet    |    zwi.pl - blog o zarabianiu przez internet 

 

Odnośnik do komentarza

Dołącz do nas za darmo i naucz się zarabiać!

  • Dostęp do darmowych poradników pokazujących krok po kroku jak zarabiać w Internecie
  • Sposoby zarabiania niepublikowane nigdzie indziej
  • Aktywna społeczność, która pomoże Ci rozwiązać problemy i doradzi
  • Profesjonalne treści na temat SEO, social media, afiliacji, kryptowalut i wiele więcej!

 

 

O tej godzinie to ja ci mogę jedynie polecić przepis na naleśniki, ale doradzę na dobry początek, byś zainstalował sobie wersję VB z 2010r. Po prostu dużo poradników i wiedzy użytkowników opiera się o tę wersję. Ja już na wersji bodaj z 2012 (Nie pamiętam) miałem co chwile error'y, bo nie szło nic wklepać w kod.

  • Super 1

Seohost

Odnośnik do komentarza

d93b0b9c44.gif

using System;
using System.Windows.Forms;

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

        private void button1_Click(object sender, EventArgs e) {
            timer1.Start();
        }

        private void timer1_Tick(object sender, EventArgs e) {
            progressBar1.PerformStep();
            if (progressBar1.Value == progressBar1.Maximum) {
                timer1.Stop();
                Form2 f = new Form2();
                f.Show();
            }
        }
    }
}
  • Super 2
Odnośnik do komentarza

Zrobiłem coś takiego:

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

namespace Progress
{
    public partial class Form1 : Form
    {
        private Timer time = new Timer();

        private void InitializeMyTimer()
        {
            time.Interval = 50;

            time.Tick += new EventHandler(IncreaseProgressBar);

            time.Start();
        }

        private void IncreaseProgressBar(object sender, EventArgs e)
        {
            progressBar1.Increment(1);

            if (progressBar1.Value == progressBar1.Maximum)
            {
                time.Stop();
                button2.Enabled = true;
            }
        }

        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            InitializeMyTimer();
        }

    }
}
  • Super 1
Odnośnik do komentarza

Ok, to może ja coś źle robię.

1. Otwieram VB (2017 lub 2010)

2. Tworzę nowy projekt (Aplikacja Windows Forms) C#

3. Klikam 2x na form1

4. Czyszczę cały kod i wklejam ten, który podał @cantoro oraz @coffee powyżej.

Używam C# od dwóch dni, więc nie jedźcie po mnie za bardzo :wacko:

iwi.pl - blog o inwestowaniu przez internet    |    zwi.pl - blog o zarabianiu przez internet 

 

Odnośnik do komentarza

Mój program wymaga utworzenia dwóch przycisków i progressbara w Form1 [Design]. Dodajesz z Toolbox.

Możliwe też, że kasujesz domyślną nazwę (namespace). W moim przypadku nazwij projekt Progress.

W pliku Form1.Designer.cs powinno być coś takiego (po dodaniu przycisków):

namespace Progress
{
    partial class Form1
    {
        /// <summary>
        /// Required designer variable.
        /// </summary>
        private System.ComponentModel.IContainer components = null;

        /// <summary>
        /// Clean up any resources being used.
        /// </summary>
        /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
        protected override void Dispose(bool disposing)
        {
            if (disposing && (components != null))
            {
                components.Dispose();
            }
            base.Dispose(disposing);
        }

        #region Windows Form Designer generated code

        /// <summary>
        /// Required method for Designer support - do not modify
        /// the contents of this method with the code editor.
        /// </summary>
        private void InitializeComponent()
        {
            this.button1 = new System.Windows.Forms.Button();
            this.button2 = new System.Windows.Forms.Button();
            this.progressBar1 = new System.Windows.Forms.ProgressBar();
            this.SuspendLayout();
            // 
            // button1
            // 
            this.button1.Location = new System.Drawing.Point(13, 33);
            this.button1.Name = "button1";
            this.button1.Size = new System.Drawing.Size(75, 23);
            this.button1.TabIndex = 0;
            this.button1.Text = "button1";
            this.button1.UseVisualStyleBackColor = true;
            this.button1.Click += new System.EventHandler(this.button1_Click);
            // 
            // button2
            // 
            this.button2.Location = new System.Drawing.Point(294, 119);
            this.button2.Name = "button2";
            this.button2.Size = new System.Drawing.Size(75, 23);
            this.button2.TabIndex = 1;
            this.button2.Text = "button2";
            this.button2.UseVisualStyleBackColor = true;
            this.button2.Enabled = false;
            // 
            // progressBar1
            // 
            this.progressBar1.Location = new System.Drawing.Point(13, 90);
            this.progressBar1.Name = "progressBar1";
            this.progressBar1.Size = new System.Drawing.Size(356, 23);
            this.progressBar1.TabIndex = 2;
            // 
            // Form1
            // 
            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
            this.ClientSize = new System.Drawing.Size(447, 172);
            this.Controls.Add(this.progressBar1);
            this.Controls.Add(this.button2);
            this.Controls.Add(this.button1);
            this.Name = "Form1";
            this.Text = "Form1";
            this.ResumeLayout(false);

        }

        #endregion

        private System.Windows.Forms.Button button1;
        private System.Windows.Forms.Button button2;
        private System.Windows.Forms.ProgressBar progressBar1;
    }
}

Aby button2 był nieaktywny dodałem tutaj:

this.button2.Enabled = false;
  • Super 1
Odnośnik do komentarza
Public Class Form1

    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click

        Do While ProgressBar1.Value < 100

            Threading.Thread.Sleep(80)

            ProgressBar1.Value = ProgressBar1.Value + 1

            If ProgressBar1.Value = 100 Then
                Button2.Enabled = True
            End If

        Loop

  



    End Sub
End Class

w vb wyglada to tak

jak progress bar doleci do konca wtedy button2 = enabled

image.png.2e7c499338c619714411435163683b22.pngimage.png.51ed2b0e3696f29fb38b59deddd22b8e.pngimage.png.f26c09d8c3372452e4370f5e06416a4f.png

  • Super 1

6.png

Odnośnik do komentarza
16 minut temu, Cresh2 napisał:

Public Class Form1

    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click

        Do While ProgressBar1.Value < 100

            Threading.Thread.Sleep(80)

            ProgressBar1.Value = ProgressBar1.Value + 1

            If ProgressBar1.Value = 100 Then
                Button2.Enabled = True
            End If

        Loop

  



    End Sub
End Class

w vb wyglada to tak

jak progress bar doleci do konca wtedy button2 = enabled

image.png.2e7c499338c619714411435163683b22.pngimage.png.51ed2b0e3696f29fb38b59deddd22b8e.pngimage.png.f26c09d8c3372452e4370f5e06416a4f.png

Nigdy przenigdy nie róbcie tego w ten sposób. Zamrażanie wątku, na którym siedzi gui NIGDY nie jest dobrym pomysłem.

  • Super 1
Odnośnik do komentarza

Dzięki panowie @coffee, @Ramagos, @Cresh2 i @cantoro za pomoc! Mam nadzieję, że nikogo nie pominąłem :-)

Zrobiłem wg poleceń @coffee.

A jak dodać teraz pod progressbar'em aby wyświetlało się co aktualnie program robi?

Mam na myśli takie coś jak na tym zdjęciu:

giphy.gif

Pochodzi ono z tego wpisu: 

Póki co dodałem nowy lable3 pod progressbar'em i dodałem nowy timer2 (dobrze?)

Chciałem dodać taki kod do timer2:

ProgressBar1.Increment(1)
        If ProgressBar1.Value = 1 Then
            Label1.Text = "Ładowanie"
        End If
        If ProgressBar1.Value = 15 Then
            Label1.Text = "Łączenie ze serwerem"
        End If
        If ProgressBar1.Value = 25 Then
            Label1.Text = "Wczytywanie ustawień konta"
        End If
        If ProgressBar1.Value = 45 Then
            Label1.Text = "Wczytywanie danych..."
        End If
        If ProgressBar1.Value = 55 Then
            Label1.Text = "Wczytywanie danych - zakończone!"
        End If
        If ProgressBar1.Value = 80 Then
            Label1.Text = "Łączenie z bazą..."
        End If
        If ProgressBar1.Value = 86 Then
            Label1.Text = "Wczytano pomyślnie!"
        End If
        If ProgressBar1.Value = 95 Then
            Label1.Text = "Proces zakończył się SUKCESEM!"
        End If

Jednak on nie działa pod wersją 2017 (na 2010 działa). Co muszę w nim przerobić?

iwi.pl - blog o inwestowaniu przez internet    |    zwi.pl - blog o zarabianiu przez internet 

 

Odnośnik do komentarza

@coffee, po lekkich modyfikacjach działa. Oto ostateczny kod tego timera:

{
            progressBar1.Increment(1);

            if (progressBar1.Value == 1)
                label3.Text = "Ładowanie";
            

            if (progressBar1.Value == 15)
                label3.Text = "Łączenie z serwerem";

            if (progressBar1.Value == 25)
                label3.Text = "Wczytywanie ustawień konta";

            if (progressBar1.Value == 45)
                label3.Text = "Wczytywanie danych...";

            if (progressBar1.Value == 55)
                label3.Text = "Wczytywanie danych...";

            if (progressBar1.Value == 80)
                label3.Text = "Łączenie z bazą...";

            if (progressBar1.Value == 90)
                label3.Text = "Łączenie z bazą...";

            if (progressBar1.Value == 99)
                label3.Text = "Proces zakończył się sukcesem";
        }

Musiałem wywalić 'Then' oraz 'End if' bo nie rozpoznawało tego w ogóle.

Dodatkowo po .Value = dodałem obok kolejny "=". i ubrałem to w nawiasy (po if i na końcu).

Nie wiem czy to poprawnie napisany kod pod względem programowania ale działa.

Jak możesz to rzuć okiem czy coś zmienić ewentualnie.

Problem jest tylko w tym, że progressbar nie idzie wolno i w miarę płynnie (step ustawiony na 1).

iwi.pl - blog o inwestowaniu przez internet    |    zwi.pl - blog o zarabianiu przez internet 

 

Odnośnik do komentarza

Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto

Jedynie zarejestrowani użytkownicy mogą komentować zawartość tej strony.

Zarejestruj nowe konto

Załóż nowe konto. To bardzo proste!

Zarejestruj się

Zaloguj się

Posiadasz już konto? Zaloguj się poniżej.

Zaloguj się
×
×
  • Dodaj nową pozycję...

Powiadomienie o plikach cookie

Ta strona korzysta z ciasteczek aby świadczyć usługi na najwyższym poziomie. Dalsze korzystanie z witryny oznacza zgodę na ich wykorzystanie. Polityka prywatności .