0

他のフォームにメイン フォームと進行状況バーがあります。メイン フォームのロード時に、Comscanner などの他のフォームに進行状況バーをロードしたいので、以下の Comscanner フォームに 2 つのメソッドを記述しました。

    public void SetMaximum(int max)
    {
        PrgComPortScan.Maximum = max;
        PrgComPortScan.Value   = 0;
    }

    public void Increment()
    {
        if(PrgComPortScan.Maximum > (PrgComPortScan.Value + 1)) 
        {
            PrgComPortScan.Value = PrgComPortScan.Value + 1;
        }  
    }

しかし、タイマーを使用してメインフォームでこれらのメソッドを呼び出している間、プログレスバーを表示できません。タイマーコントロールとそのティックプロパティも使用しましたが、何か不足していますか?

4

2 に答える 2

0

イベントで 2 つのフォームを同時に更新する必要があると思いますOnLoadスクショット

2 番目のフォームのコードは次のとおりです。

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

    protected override void OnLoad(EventArgs e)
    {
        base.OnLoad(e);
        Application.DoEvents();            
    }

    public void SetProgress(int value)
    {
        progressBar1.Value=value;
    }
    public void SetProgress(int value, int max)
    {
        progressBar1.Maximum=max;
        progressBar1.Value=value;            
    }
    public void Increment()
    {
        progressBar1.PerformStep();
    }
}

メインフォームのコードは次のとおりです。

public partial class MainForm : Form
{
    public MainForm()
    {
        InitializeComponent();
    }

    protected override void OnLoad(EventArgs e)
    {
        base.OnLoad(e);
        this.Show();
        label1.Text="Initializing Form1";
        Form1 dlg=new Form1();
        dlg.Show();
        Application.DoEvents();
        dlg.Location=new Point(this.Location.X+this.Size.Width+5, this.Location.Y);
        System.Threading.Thread.Sleep(1400);

        for(int i=0; i<10; i++)
        {
            label1.Text="Setting Progress Bar at "+(i+1).ToString()+" of 10";
            dlg.SetProgress(i+1, 10);
            Application.DoEvents();
            System.Threading.Thread.Sleep(1400);
        }
        label1.Text="Done!";
    }
}

そしてそれはすべてから始まります

    static void Main()
    {
        Application.EnableVisualStyles();
        Application.SetCompatibleTextRenderingDefault(false);
        Application.Run(new MainForm());
    }
于 2012-10-01T13:43:19.533 に答える
0

プログレスバー フォームから別のフォームにアクセスするには、以下のコードを試してください。

frmProgramExport objexport = new frmProgramExport(); // Where frmProgramExport your from name 
objexport.prgImport.PerformStep();
于 2012-10-01T12:46:39.247 に答える