WPF/プログレスバー
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
検索
|
最終更新
|
ヘルプ
|
ログイン
]
開始行:
[[WPF]]
&tag(WPF/プログレスバー);
*目次 [#u99e820f]
#contents
*関連ページ [#q1db7793]
*参考情報 [#iaa9c05a]
*プログレスバー付きのダイアログを実装 [#kf9e1ecd]
-独立したウィンドウに開始、終了ボタンを追加し、開始ボタン...
-xamlファイル。
#pre{{
<Window x:Class="ControlDemo.DialogDemo.ProgressDialogBas...
xmlns="http://schemas.microsoft.com/winfx/2006/xa...
xmlns:x="http://schemas.microsoft.com/winfx/2006/...
xmlns:d="http://schemas.microsoft.com/expression/...
xmlns:mc="http://schemas.openxmlformats.org/marku...
xmlns:local="clr-namespace:ControlDemo.DialogDemo...
mc:Ignorable="d"
Title="プログレスバー付きのダイアログ" Height="14...
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto"></RowDefinition>
<RowDefinition Height="Auto"></RowDefinition>
<RowDefinition Height="*"></RowDefinition>
</Grid.RowDefinitions>
<ProgressBar x:Name="progressBar" Height="25" Mar...
<StackPanel Grid.Row="1" Orientation="Horizontal"...
<Button x:Name="buttonStart" Width="100" Clic...
<Button x:Name="buttonChange" Width="100" Cli...
<Button x:Name="buttonFinish" Width="100" Mar...
</StackPanel>
</Grid>
</Window>
}}
-対応するクラス。
#pre{{
namespace ControlDemo.DialogDemo.ProgressDialogBasic
{
public partial class ProgressDialogBasicWindow : Window
{
private BackgroundWorker backgroundWorker = new B...
private ProgressDialogBasicVM viewModel;
public ProgressDialogBasicWindow()
{
InitializeComponent();
this.viewModel = new ProgressDialogBasicVM();
DataContext = viewModel;
//BackgroundWorkerのセットアップ
//進捗状況を報告したい場合trueに設定
backgroundWorker.WorkerReportsProgress = true;
//途中でキャンセルしたい場合trueに設定
backgroundWorker.WorkerSupportsCancellation =...
//プログレス値が変更した場合の処理
backgroundWorker.ProgressChanged += ProgressC...
//BackgroundWorkerで実行する処理
backgroundWorker.DoWork += DoWork;
//終了時に呼び出される
backgroundWorker.RunWorkerCompleted += RunWor...
}
private void DoWork(object sender, DoWorkEventArg...
{
for (int i = 50; i <= 100; i++)
{
if (backgroundWorker.CancellationPending)
{
//キャンセルしたい場合作業中に明示的...
e.Cancel = true;
return;
}
Thread.Sleep(200);
backgroundWorker.ReportProgress(i);
}
}
private void ProgressChanged(object sender, Progr...
{
progressBar.Value = e.ProgressPercentage;
}
private void RunWorkerCompleted(object sender, Ru...
{
if (e.Cancelled)
{
MessageBox.Show("Cancel");
} else
{
MessageBox.Show("Completed");
}
buttonStart.IsEnabled = true;
buttonFinish.IsEnabled = false;
}
private void ButtonStart_Click(object sender, Rou...
{
buttonStart.IsEnabled = false;
buttonFinish.IsEnabled = true;
backgroundWorker.RunWorkerAsync();
}
private void ButtonFinish_Click(object sender, Ro...
{
backgroundWorker.CancelAsync();
buttonStart.IsEnabled = true;
buttonFinish.IsEnabled = false;
}
}
}
}}
-DoWorkイベントハンドラを引数で渡したい場合。
#pre{{
private void ButtonChange_Click(object buttonSend...
{
DoWorkEventHandler handler = (sender, e) =>
{
for (int i = 50; i <= 100; i++)
{
BackgroundWorker worker = sender as B...
if (worker.CancellationPending)
{
e.Cancel = true;
return;
}
Thread.Sleep(2);
worker.ReportProgress(i);
}
};
ChangeDoWork(handler);
}
private void ChangeDoWork(DoWorkEventHandler hand...
{
backgroundWorker.DoWork -= DoWork;
backgroundWorker.DoWork += handler;
}
}}
終了行:
[[WPF]]
&tag(WPF/プログレスバー);
*目次 [#u99e820f]
#contents
*関連ページ [#q1db7793]
*参考情報 [#iaa9c05a]
*プログレスバー付きのダイアログを実装 [#kf9e1ecd]
-独立したウィンドウに開始、終了ボタンを追加し、開始ボタン...
-xamlファイル。
#pre{{
<Window x:Class="ControlDemo.DialogDemo.ProgressDialogBas...
xmlns="http://schemas.microsoft.com/winfx/2006/xa...
xmlns:x="http://schemas.microsoft.com/winfx/2006/...
xmlns:d="http://schemas.microsoft.com/expression/...
xmlns:mc="http://schemas.openxmlformats.org/marku...
xmlns:local="clr-namespace:ControlDemo.DialogDemo...
mc:Ignorable="d"
Title="プログレスバー付きのダイアログ" Height="14...
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto"></RowDefinition>
<RowDefinition Height="Auto"></RowDefinition>
<RowDefinition Height="*"></RowDefinition>
</Grid.RowDefinitions>
<ProgressBar x:Name="progressBar" Height="25" Mar...
<StackPanel Grid.Row="1" Orientation="Horizontal"...
<Button x:Name="buttonStart" Width="100" Clic...
<Button x:Name="buttonChange" Width="100" Cli...
<Button x:Name="buttonFinish" Width="100" Mar...
</StackPanel>
</Grid>
</Window>
}}
-対応するクラス。
#pre{{
namespace ControlDemo.DialogDemo.ProgressDialogBasic
{
public partial class ProgressDialogBasicWindow : Window
{
private BackgroundWorker backgroundWorker = new B...
private ProgressDialogBasicVM viewModel;
public ProgressDialogBasicWindow()
{
InitializeComponent();
this.viewModel = new ProgressDialogBasicVM();
DataContext = viewModel;
//BackgroundWorkerのセットアップ
//進捗状況を報告したい場合trueに設定
backgroundWorker.WorkerReportsProgress = true;
//途中でキャンセルしたい場合trueに設定
backgroundWorker.WorkerSupportsCancellation =...
//プログレス値が変更した場合の処理
backgroundWorker.ProgressChanged += ProgressC...
//BackgroundWorkerで実行する処理
backgroundWorker.DoWork += DoWork;
//終了時に呼び出される
backgroundWorker.RunWorkerCompleted += RunWor...
}
private void DoWork(object sender, DoWorkEventArg...
{
for (int i = 50; i <= 100; i++)
{
if (backgroundWorker.CancellationPending)
{
//キャンセルしたい場合作業中に明示的...
e.Cancel = true;
return;
}
Thread.Sleep(200);
backgroundWorker.ReportProgress(i);
}
}
private void ProgressChanged(object sender, Progr...
{
progressBar.Value = e.ProgressPercentage;
}
private void RunWorkerCompleted(object sender, Ru...
{
if (e.Cancelled)
{
MessageBox.Show("Cancel");
} else
{
MessageBox.Show("Completed");
}
buttonStart.IsEnabled = true;
buttonFinish.IsEnabled = false;
}
private void ButtonStart_Click(object sender, Rou...
{
buttonStart.IsEnabled = false;
buttonFinish.IsEnabled = true;
backgroundWorker.RunWorkerAsync();
}
private void ButtonFinish_Click(object sender, Ro...
{
backgroundWorker.CancelAsync();
buttonStart.IsEnabled = true;
buttonFinish.IsEnabled = false;
}
}
}
}}
-DoWorkイベントハンドラを引数で渡したい場合。
#pre{{
private void ButtonChange_Click(object buttonSend...
{
DoWorkEventHandler handler = (sender, e) =>
{
for (int i = 50; i <= 100; i++)
{
BackgroundWorker worker = sender as B...
if (worker.CancellationPending)
{
e.Cancel = true;
return;
}
Thread.Sleep(2);
worker.ReportProgress(i);
}
};
ChangeDoWork(handler);
}
private void ChangeDoWork(DoWorkEventHandler hand...
{
backgroundWorker.DoWork -= DoWork;
backgroundWorker.DoWork += handler;
}
}}
ページ名: