MFC(C++)
很久没用C++做界面,凭记忆。
可以利用类向导给编辑框(Edit)关联变量。
一,控制类型变量,CEdit,可以通过GetWindowText获取编码框内容,SetWindowText设置编辑框内容。还可以对编辑框进行移动、隐藏等操作。
二,值类型变量,可以选择CString、int、double等,Update(true)通过控件更新关联的值,Update(false)通过关联的值更新界面。
C# 的WinForm
控件有name属性,通过name直接控制此变量。
WPF
可以向WinForm那样通过name控制。也可以绑定。绑定的方法如下。
界面xaml:
xml
<Window x:Class="WpfApp1.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:WpfApp1"
mc:Ignorable="d"
Title="MainWindow" Height="450" Width="800">
<Window.DataContext>
<local:CViewMode/>
</Window.DataContext>
<Grid>
<TextBox HorizontalAlignment="Left" Height="23" Margin="66,41,0,0" TextWrapping="Wrap" Text="{Binding Age}" VerticalAlignment="Top" Width="120"/>
</Grid>
</Window>
核心代码
csharp
using System.ComponentModel;
using System.Runtime.CompilerServices;
using System.Windows;
namespace WpfApp1
{
/// <summary>
/// MainWindow.xaml 的交互逻辑
/// </summary>
public partial class MainWindow : Window
{
public MainWindow(CMode mode)
{
InitializeComponent();
DataContext = new CViewMode { D = mode };
}
public MainWindow()
{
InitializeComponent();
}
}
public class CObservableObject : INotifyPropertyChanged
{
// 实现INotifyPropertyChanged接口
public event PropertyChangedEventHandler PropertyChanged;
/// <summary>
/// 属性变更通知
/// </summary>
protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = null)
{
// 确保在UI线程触发事件
if (Application.Current?.Dispatcher != null)
{
if (Application.Current.Dispatcher.CheckAccess())
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
else
{
Application.Current.Dispatcher.Invoke(() =>
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
});
}
}
else
{
// 如果没有UI上下文,直接触发
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
}
/// <summary>
/// 设置属性值并触发通知
/// </summary>
protected bool SetProperty<T>(ref T field, T value, [CallerMemberName] string propertyName = null)
{
if (Equals(field, value))
return false;
field = value;
OnPropertyChanged(propertyName);
return true;
}
}
public class CMode
{
public int m_iAge = 15;
}
public class CViewMode : CObservableObject
{
public CMode D = new CMode();
public int Age
{
get => D.m_iAge;
set { SetProperty(ref D.m_iAge, value); }
}
}
}
调用
csharp
namespace WpfApp1
{
/// <summary>
/// App.xaml 的交互逻辑
/// </summary>
public partial class App : Application
{
protected override void OnStartup(StartupEventArgs e)
{
CMode mode = new CMode();
mode.m_iAge = 30;
MainWindow win = new MainWindow(mode);
win.ShowDialog();
Console.WriteLine("Age:" + mode.m_iAge);
}
}
}
对整个窗体设置数据数据源


绑定编辑框



扩展阅读
| 我想对大家说的话 |
|---|
| 工作中遇到的问题,可以按类别查阅鄙人的算法文章,请点击《算法与数据汇总》。 |
| 学习算法:按章节学习《喜缺全书算法册》,大量的题目和测试用例,打包下载。重视操作 |
| 有效学习:明确的目标 及时的反馈 拉伸区(难度合适) 专注 |
| 员工说:技术至上,老板不信;投资人的代表说:技术至上,老板会信。 |
| 闻缺陷则喜(喜缺)是一个美好的愿望,早发现问题,早修改问题,给老板节约钱。 |
| 子墨子言之:事无终始,无务多业。也就是我们常说的专业的人做专业的事。 |
| 如果程序是一条龙,那算法就是他的是睛 |
| 失败+反思=成功 成功+反思=成功 |
视频课程
先学简单的课程,请移步CSDN学院,听白银讲师(也就是鄙人)的讲解。
https://edu.csdn.net/course/detail/38771
如何你想快速形成战斗了,为老板分忧,请学习C#入职培训、C++入职培训等课程
https://edu.csdn.net/lecturer/6176
测试环境
操作系统:win7 开发环境: VS2019 C++17
或者 操作系统:win10 开发环境: VS2022 C++17
如无特殊说明,本算法 用**C++**实现。
