参考书:《 visual C# 从入门到精通》
第一部分 Visual C# 和Visual Studio 2015概述
第1章 欢迎进入C# 编程世界
文章目录
1.1 开始在Visual Studio 2015环境中编程
1.2 写第一个程序
using System;
namespace c1
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Hello World!");
Console.ReadLine();//等到用户按enter键
}
}
}
1.3 使用命名空间
1.4创建图形应用程序
模板:通用Windows平台(Universal Windows Platform,UWP)。其创建的应用可以在所有的Windows设备上运行。
步骤:
- 创建新项目->C#->空白应用(通用Windows)
- 创建完成以后,在解决方案管理器中有 MainPage.xaml->MainPage.xaml.cs的C#文件。
- 双击MainPage.xaml,出现设计视图和代码视图
- 设计视图旁边容易找到工具箱标签,其中有可放到窗体上的各种组件和控件。一共有三类:常用XAML控件、所有XAML控件、常规。展开常用XAML控件。
- 单击TextBlock将其拖放到设计视图显示的窗体。可以单击控件来调整位置。另外可以在控件的属性窗口中调整控件的各种属性。一共控件通常有九大类别:画笔、布局、文本、外观、公共、自动化、转换、交互、杂项。如布局中的HorizontalAlignment和VerticalAlignment属性,文本中的TextWrapping属性。
- 在属性窗口的文本中,将FontSize属性修改为20pt(输入20pt回车)。pt表明单位是磅,1磅等于1/72英寸。可以看到XAML窗格的代码中出现了“FontSize=26.667”,属性窗口中的FontSize属性回车后也变为26.667px。就是磅换成像素之后的约值。
- 在XAML窗格中编辑Text属性为"Please enter your name"。或者在属性窗口公共的Text属性。
- 从工具箱中将TextBox控件拖放到窗体上,放到TextBlock控件的下方。
- 在设计视图中改变TextBox控件的位置和大小使其和TextBlock控件对齐。
- 在TextBox的属性窗口的顶部,将名称属性改为 userName。
- 将工具箱中的Button控件拖放到窗体,定位到TextBox右侧与其底部水平对齐。
- 将Button控件的名称属性改为 ok,将Content属性改为OK。
- 在生成菜单选择 生成解决方案。
- 在调试菜单选择开始调试。程序会显示如下窗体。
1.4.1 探索通用Windows平台应用程序
点开MainPage.xaml.cs文件,出现的代码如下:
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Runtime.InteropServices.WindowsRuntime;
using Windows.Foundation;
using Windows.Foundation.Collections;
using Windows.UI.Xaml;
using Windows.UI.Xaml.Controls;
using Windows.UI.Xaml.Controls.Primitives;
using Windows.UI.Xaml.Data;
using Windows.UI.Xaml.Input;
using Windows.UI.Xaml.Media;
using Windows.UI.Xaml.Navigation;
// https://go.microsoft.com/fwlink/?LinkId=402352&clcid=0x804 上介绍了“空白页”项模板
namespace c_1_4
{
/// <summary>
/// 可用于自身或导航至 Frame 内部的空白页。
/// </summary>
public sealed partial class MainPage : Page
{
public MainPage()
{
this.InitializeComponent();
}
private void TextBlock_SelectionChanged(object sender, RoutedEventArgs e)
{
}
}
}
发现代码中除了大量的using指令,就只有MainPage类的定义。MainPage类包含一个构造器来调用InitializeComponent方法。类包含的方法实际要多的多。大多数代码是根据窗体的XAML描述来自动生成的,已自动隐藏了。这些代码包括创建和显示窗体,创建和定位窗体上的各个控件等等。
另外发现在解决方案资源管理器中还有另一个源代码文件,在App.xaml下的App.xaml.cs文件。在UWP应用中,App.xaml文件提供了应用程序的入口。代码如下:
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Runtime.InteropServices.WindowsRuntime;
using Windows.ApplicationModel;
using Windows.ApplicationModel.Activation;
using Windows.Foundation;
using Windows.Foundation.Collections;
using Windows.UI.Xaml;
using Windows.UI.Xaml.Controls;
using Windows.UI.Xaml.Controls.Primitives;
using Windows.UI.Xaml.Data;
using Windows.UI.Xaml.Input;
using Windows.UI.Xaml.Media;
using Windows.UI.Xaml.Navigation;
namespace c_1_4
{
/// <summary>
/// 提供特定于应用程序的行为,以补充默认的应用程序类。
/// </summary>
sealed partial class App : Application
{
/// <summary>
/// 初始化单一实例应用程序对象。这是执行的创作代码的第一行,
/// 已执行,逻辑上等同于 main() 或 WinMain()。
/// </summary>
public App()
{
this.InitializeComponent();
this.Suspending += OnSuspending;
}
/// <summary>
/// 在应用程序由最终用户正常启动时进行调用。
/// 将在启动应用程序以打开特定文件等情况下使用。
/// </summary>
/// <param name="e">有关启动请求和过程的详细信息。</param>
protected override void OnLaunched(LaunchActivatedEventArgs e)
{
Frame rootFrame = Window.Current.Content as Frame;
// 不要在窗口已包含内容时重复应用程序初始化,
// 只需确保窗口处于活动状态
if (rootFrame == null)
{
// 创建要充当导航上下文的框架,并导航到第一页
rootFrame = new Frame();
rootFrame.NavigationFailed += OnNavigationFailed;
if (e.PreviousExecutionState == ApplicationExecutionState.Terminated)
{
//TODO: 从之前挂起的应用程序加载状态
}
// 将框架放在当前窗口中
Window.Current.Content = rootFrame;
}
if (e.PrelaunchActivated == false)
{
if (rootFrame.Content == null)
{
// 当导航堆栈尚未还原时,导航到第一页,
// 并通过将所需信息作为导航参数传入来配置
// 参数
rootFrame.Navigate(typeof(MainPage), e.Arguments);
}
// 确保当前窗口处于活动状态
Window.Current.Activate();
}
}
/// <summary>
/// 导航到特定页失败时调用
/// </summary>
///<param name="sender">导航失败的框架</param>
///<param name="e">有关导航失败的详细信息</param>
void OnNavigationFailed(object sender, NavigationFailedEventArgs e)
{
throw new Exception("Failed to load Page " + e.SourcePageType.FullName);
}
/// <summary>
/// 在将要挂起应用程序执行时调用。 在不知道应用程序
/// 无需知道应用程序会被终止还是会恢复,
/// 并让内存内容保持不变。
/// </summary>
/// <param name="sender">挂起的请求的源。</param>
/// <param name="e">有关挂起请求的详细信息。</param>
private void OnSuspending(object sender, SuspendingEventArgs e)
{
var deferral = e.SuspendingOperation.GetDeferral();
//TODO: 保存应用程序状态并停止任何后台活动
deferral.Complete();
}
}
}
现在需要注意的是OnLaunched方法,该方法在应用程序启动时运行,它的代码导致应用程序新建一个Frame对象,在这个frame中显示MainPage窗体并激活它。
1.4.2 向图形应用程序添加代码
->为OK按钮写代码
- 双击MainPage.xmal在设计视图中打开。
- 单击OK按钮选定它。
- 在属性窗口中单击“选定元素的事件处理程序”按钮(闪电图标)。
- 在Click事件旁边的文本框中输入okClick并回车。此时会打开MainPage.xaml.cs,发现在MainPage类中自动添加okClick方法。如下:
private void okClick(object sender, RoutedEventArgs e)
{
}
- 在代码顶部添加
using Windows.UI.Popups;
- 在okClick方法中添加以下代码:
MessageDialog msg = new MessageDialog("Hello, " + userName.Text); msg.ShowAsync();
,这样单击ok按钮将运行以上代码。 - 点击MainPage.xaml回到设计视图,在XMAL中查看Button元素:
<Button Content="OK" Margin="665,184,0,0" VerticalAlignment="Top" Height="71" Width="60" Click="okClick"/>
。 - 调试->开始调试。
- 文本框中输入自己名字单击ok按钮会出现如图结果的一条消息。