c# - 如何在表单和页面之间传递变量
问题描述
在我的项目 (WPF) 中有一个表单(其中声明了一个对象),其中包含一个框架,该框架根据单击的按钮显示不同的页面。在一个页面中,我拖动一个文件并获得路径。如何将路径返回到主窗体,以便可以将其“发送”到对象?(然后将由表单中的其他功能使用)
主窗体的(部分)代码
CSV csv = new CSV();
public MainWindow()
{
InitializeComponent();
Main.Content = new LoadCSVPage();
}
public MainWindow(string path)
{
InitializeComponent();
csv.SetLocation(path);
}
LoadCSV 页面代码
public LoadCSVPage()
{
InitializeComponent();
}
private void LoadCSV_DragEnter(object sender, DragEventArgs e)
{
string filePath = "";
string[] files = (string[])e.Data.GetData(DataFormats.FileDrop);
foreach (string file in files)
{
filePath = file;
}
MainWindow main = new MainWindow(filePath);
main.Show();
}
我明白缺少了什么!将变量传递给主构造函数后,我没有显示它(通过 main.show)。现在我已经插入了它,它并不能说服我。有更清洁的方法吗?哦不,有问题。使用 main.show 创建了一个附加窗口!
解决方案
我开始说有很多方法可以实现你想要的。我看到的第一个问题(即使您没有发布项目的 XAML 部分)是您显示 MainWindow 两次:第一次显示时,第二次在页面内拖动文件时。
一个想法可能是将 Csv 对象传递给页面:
public CSV csv = new CSV();
public MainWindow()
{
InitializeComponent();
Main.Content = new LoadCSVPage(csv);
}
public partial class LoadCSVPage: Page
{
private CSV _csv;
public LoadCSVPage(CSV mainCsv)
{
InitializeComponent();
_csv = mainCsv;
}
private void LoadCSV_DragEnter(object sender, DragEventArgs e)
{
string filePath = "";
string[] files = (string[])e.Data.GetData(DataFormats.FileDrop);
//foreach (string file in files)
//{
//This also is not really clear: what happen if you drag more then one file?
//This way you are cycling for each file, but you are selecting the last`
//filePath = file;
//}
if(files.Length > 0)
{
filePath = files.Last();
}
// Here the csv object can obtain the filePath
_csv.SetLocation(filePath);
}
}
然后你可以直接从页面的方法中传递路径。
推荐阅读
- python - 无法使用 _set | 查询外键相关对象 姜戈?
- javascript - 如何设置数据是否清除 onChange 函数不执行
- node.js - 使用 @kubernetes/client-node 修补 K8s 自定义资源
- java - 通过检查参数进行 URL 重定向
- gcc - gcc 无法链接 llc 输出的 objfile
- c# - 如何诊断 Microsoft 身份验证失败?
- sql - 将 NULL 替换为连接函数 SQL 中的自定义文本
- python - 第一个列表在附加另一个第二个列表后自动更新,然后在 Python 中更改第二个列表
- oauth-2.0 - Mailkit 无法使用 O365 oAuth2 帐户进行身份验证
- html - GET https://github.io/scss/main.scss net::ERR_ABORTED 404 and Uncaught ReferenceError: cards is not defined at Module.