MessageDialog

Button のクリックで MessageDialog を表示します。

前田稔の超初心者のプログラム入門

プログラムの説明

  1. Windows10 & Visual Studio 2017 で Button をクリックすると MessageDialog を表示するプロジェクトを作成します。
    新規プロジェクトを作成して Button を張り付けます。
    Button クリックのイベントハンドラ(Button_Click)を設定して下さい。
    プロジェクトの作成とツールの貼り付けは C# Store Application を参照して下さい。
  2. Button クリックのイベントハンドラをコーディングします。
    MessageDialog で "Hello World" を表示します。
    dlg.ShowAsync(); は非同期で実行されるので async, await を指定しないと警告が出ます。
    警告の意味は「dlg.ShowAsync()の直後で結果をテストしても実行が終わているとは限らない」ことに留意せよです。
            async private void Button_Click(object sender, RoutedEventArgs e)
            {
                Windows.UI.Popups.MessageDialog dlg =
                    new Windows.UI.Popups.MessageDialog("Hello World");
                await dlg.ShowAsync();
            }
    
  3. プロジェクトをコンパイルして実行を確認します。
    ボタンをクリックすると "Hello World" が表示されます。

制御の流れ

  1. 従来に比べてプログラムの制御の流れが解りにくくなっています。
    このプログラムを材々に、私なりに制御の流れを調べてみました。
    Text Editor などで Package.appxmanifest を表示して下さい。
    "App1.App" が最初に制御が渡される Class です。
      <Applications>
        <Application Id="App"
            Executable="$targetnametoken$.exe"
            EntryPoint="App1.App">
    
  2. App.xaml.cs を表示して下さい。
    namespace App1 の class App が最初に呼び出されます。
    App の Constructor から InitializeComponent() を呼び出します。
    従来は Form のデザイン画面にツールボックスから張り付けると InitializeComponent() メソッドが自動生成されていました。
    これに代わるものが XAML(ザムル)のようです。
    また従来は、Constructor に InitializeComponent() を呼び出すコードを追加しなければなりませんでした。
    Windows10 では、自動的に InitializeComponent() メソッドを呼び出すコードが書かれています。
    InitializeComponent() メソッドは、ビルドすると作成される \App1\obj\ARM\Debug\ フォルダーの中の MainPage.g.i.cs で定義されています。
    (設定によって \App1\obj\x86\Debug\MainPage.g.i.cs の場合もあります)
        namespace App1
        sealed partial class App : Application
            public App()
            {   this.InitializeComponent();
                this.Suspending += OnSuspending;
            }
    
    App.xaml.cs の OnLaunched() メソッドはアプリがエンド・ユーザーにより正常に起動されたときに呼び出されます。
    アプリが終了していた場合は、保存されていたセッション状態を復元します。
    初めて起動したときは、Navigate() で初期ページ(MainPage Class)を呼び出します。
        protected override void OnLaunched(LaunchActivatedEventArgs args)
        {   ・・・
            if (!rootFrame.Navigate(typeof(MainPage), args.Arguments))
            {   throw new Exception("Failed to create initial page");
            }
        }
    
    OnSuspending() メソッドはアプリの実行が中断されたときに呼び出されます。
            private void OnSuspending(object sender, SuspendingEventArgs e)
            {   var deferral = e.SuspendingOperation.GetDeferral();
                deferral.Complete();
            }
    
  3. InitializeComponent() で呼び出される App.xaml は、画面が空の初期ウインドウです。
        <Application
            x:Class="App1.App"
            xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
            xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
            xmlns:local="using:App1">
              ・・・
    
  4. App.xaml.cs の OnLaunched() から呼び出される MainPage.xaml.cs です。
    Constructor から InitializeComponent() で MainPage のフォーム設定を呼び出します。
        public sealed partial class MainPage : Page
        {
            public MainPage()
            {   this.InitializeComponent();
            }
    
    InitializeComponent() 関数は ...\App1\obj\x86\Debug\MainPage.g.i.cs で定義されています。
        public void InitializeComponent() {  }
    
  5. MainPage が起動したとき OnNavigatedTo() が呼び出されます。
    class MainPage の初期化などを行うのですが、多くの場合必要が無いので関数は省略されています。
        protected override void OnNavigatedTo(NavigationEventArgs e)
        {
            if (Window.Current.Bounds.Width < 640)
            {   flag = false;  }
            else
            {   flag = true;   }
        }
    
  6. ボタンがクリックされたときに MessageDialog を表示するメソッドです。
            async private void Button_Click(object sender, RoutedEventArgs e)
            {
                Windows.UI.Popups.MessageDialog dlg =
                    new Windows.UI.Popups.MessageDialog("Hello World");
                await dlg.ShowAsync();
            }
    
  7. InitializeComponent() で呼び出される MainPage.xaml でウインドウにボタンを張り付けます。
    Click="Button_Click" がクリックしたときに呼び出される関数です。
        <Grid>
            <Button x:Name="button" Content="Button" HorizontalAlignment="Left" Margin="135,98,0,0"
                VerticalAlignment="Top" Width="310" Height="111" Click="Button_Click"/>
        </Grid>
    
  8. 少しは制御の流れが理解できたでしょうか。
    ここの説明は私なりに調べたもので、合っている保障は無いので念のため。 (^_^;)

  1. Visual Studio 2017 でボタンの貼り付け(表示)がうまく行かない現象が起こっています。
    ウインドウのレイアウトは MainPage.xaml で定義されています。
        <Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
            <Button x:Name="button" Content="Button" VerticalAlignment="Stretch" Width="308"
                Margin="119,258,0,368" d:LayoutOverrides="TopPosition, BottomPosition"
                RenderTransformOrigin="0.456,0.428" Click="Button_Click"/>
        </Grid>
    
  2. MainPage.xaml を元に、コンパイラが MainPage.g.i.cs にソースコードを自動的に作成します。
    ツールでトラブルが発生したときは MainPage.xaml や \App1\obj\x86\Debug\MainPage.g.i.cs を調べてみて下さい。
  3. プロジェクトをコピーすると Identity Name(アプリケーションを識別するID) が同一になります。
    処理内容によっては、同一アプリとみなされると不都合が生じる場合もあります。
    不都合が生じる場合は Package.appxmanifest に定義されているので、Identity Name を変更して下さい。

超初心者のプログラム入門(C# Frame Work)