none
windowform專案ProgressBar被嫌太醜!! RRS feed

  • 問題

  • dear all

    windowform專案ProgressBar被嫌太醜!!怎麼辦??

    我試著寫一個共用的from2上面擺上會動的gif檔.

    然後在別的from1中呼叫它(用form2.show)

    from1繼續往下跑程式,比如到資料庫讀資料.

    form2上的gif圖檔不會動.

    請問要如何做呢?

    感恩!!


    2021年3月21日 下午 01:23

解答

  • Form1 讀資料庫時,不要使用主執行緒即可。

    你到微軟網站找 MultiThread 的範例專案,裡面有三種同時開多個 ProcessBar 的範例。


    不精確的問法,就會得到隨便猜的答案;自己都不肯花時間好好描述問題,又何必期望網友會認真回答?

    • 已標示為解答 王振賢 2021年3月22日 上午 10:48
    2021年3月21日 下午 03:16
  • 您可以參考這篇文件的範例自己做一個:

    EasyProgressBar for Windows Forms Application

    再不然也可以考慮使用現成的ProgressBar, 例如:

    ProgressBar

    • 已標示為解答 王振賢 2021年3月22日 上午 10:48
    2021年3月22日 上午 12:40
  • 你好,.NET的WinForm 自帶有ProgressBar,下面連結可供參考

    https://www.c-sharpcorner.com/article/progressbar-in-C-Sharp/


    大家一齊探討、學習和研究,謝謝!
    MCSD, MCAD, MCSE+I, MCDBA, MCDST, MCSA, MCTS, MCITP, MCPD,
    MCT, Microsoft Community Star(TW & HK),
    Microsoft MVP for .NET (2003-2017)
    Microsoft rMVP
    My MSMVP Blog
    請記得將對您有幫助的回覆 標示為解答 以幫助其他尋找解答及參與社群討論的朋友們。
    Please remember to click Mark as Answer on the post that helps you. This can be beneficial to other community members reading the thread.


    • 已標示為解答 王振賢 2021年3月22日 上午 10:48
    2021年3月22日 上午 03:47

所有回覆

  • Form1 讀資料庫時,不要使用主執行緒即可。

    你到微軟網站找 MultiThread 的範例專案,裡面有三種同時開多個 ProcessBar 的範例。


    不精確的問法,就會得到隨便猜的答案;自己都不肯花時間好好描述問題,又何必期望網友會認真回答?

    • 已標示為解答 王振賢 2021年3月22日 上午 10:48
    2021年3月21日 下午 03:16
  • 您可以參考這篇文件的範例自己做一個:

    EasyProgressBar for Windows Forms Application

    再不然也可以考慮使用現成的ProgressBar, 例如:

    ProgressBar

    • 已標示為解答 王振賢 2021年3月22日 上午 10:48
    2021年3月22日 上午 12:40
  • 你好,.NET的WinForm 自帶有ProgressBar,下面連結可供參考

    https://www.c-sharpcorner.com/article/progressbar-in-C-Sharp/


    大家一齊探討、學習和研究,謝謝!
    MCSD, MCAD, MCSE+I, MCDBA, MCDST, MCSA, MCTS, MCITP, MCPD,
    MCT, Microsoft Community Star(TW & HK),
    Microsoft MVP for .NET (2003-2017)
    Microsoft rMVP
    My MSMVP Blog
    請記得將對您有幫助的回覆 標示為解答 以幫助其他尋找解答及參與社群討論的朋友們。
    Please remember to click Mark as Answer on the post that helps you. This can be beneficial to other community members reading the thread.


    • 已標示為解答 王振賢 2021年3月22日 上午 10:48
    2021年3月22日 上午 03:47
  • 寫好了要的結果了

    由form1 呼叫 form2 可以看到兩邊的時一直再跑,再由form1按下取消來關閉form2(秀 "資料處理中..請稍候!!..." 的頁面)

    希望有需要的朋友可以參考...不好意思是C#

    //*********form1**************

    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;
    //加引
    using System.Windows;
    using System.Threading;

    using System.IO;

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

                timer1.Tick += new EventHandler(timer1_Tick);
                timer1.Enabled = true; 
            }

            private void btnGo_Click(object sender, EventArgs e)
            {
                if (btnGo.Text.Trim() == "執行")
                {
                    btnGo.Text = "取消";
                    WindowsFormsApp1.Class1.showWaiting();
                    //WindowsFormsApp1.Class1._cancel = false;
                    //#region 用執行緒 start 
                    //ThreadPool.QueueUserWorkItem(new WaitCallback(startJob));
                    //#endregion 用執行緒 end 
                }
                else
                { 
                    btnGo.Text = "執行";
                    WindowsFormsApp1.Class1._cancel = true;
                }
            } 

            private void timer1_Tick(object sender, EventArgs e)
            {
               toolStripLabel1.Text = DateTime.Now.ToString("HH:mm:ss.fff");
            }
        }
    }

    //***********form2*****************

    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 WindowsFormsApp1
    {
        public partial class Form2 : Form
        {
            int _times = 3595;
            public Form2()
            {
                InitializeComponent();
                //顯示時間 
                timer1.Interval = 1000;
                timer1.Tick += new EventHandler(timer1_Tick);
                timer1.Enabled = true;
            }
            private void timer1_Tick(object sender, EventArgs e)
            {
                _times++;
                if (WindowsFormsApp1.Class1._cancel == true)
                {
                    this.Dispose();
                    return;
                }
                else
                {
                    int _sur = 0;
                    int _hours = 0;
                    int _minutes = 0;
                    int _second = 0;
                    _sur = _times % 3600;
                    _hours = (_times - _sur) / 3600 ;
                    int _sur1 = _sur % 60;
                    _minutes =(_sur - _sur1) / 60;
                    _second = _sur1;
                    label_Time.Text = "執行時間:" + _hours.ToString("##0").PadLeft(2, '0') + ":" + _minutes.ToString("##0").PadLeft (2,'0') + ":" + _second.ToString("##0").PadLeft(2, '0');
                }
            }
        }
    }

    //*********class1******************

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    //加引
    using System.Windows;
    using System.Threading;

    using System.IO;

    namespace WindowsFormsApp1
    {
        class Class1
        {
            public static bool _cancel=false;
            public static string _Message="";
            public static void showWaiting()
            {

                WindowsFormsApp1.Class1._cancel = false;
                #region 用執行緒 start 
                ThreadPool.QueueUserWorkItem(new WaitCallback(startJob));
                #endregion 用執行緒 end 
            }
            private static void startJob(object path)
            {
                Form2 _form2 = new Form2();
                _form2.ShowDialog();
                System.Windows.Forms.Application.DoEvents();
            }

        }
    }

    2021年4月24日 上午 02:27