gpt4 book ai didi

c# - 在 1 个基本类和 2 个 WPF 窗口之间传递数据

转载 作者:太空宇宙 更新时间:2023-11-03 11:56:50 25 4
gpt4 key购买 nike

首先,我是 C# 和 .NET 开发的新手。我正在开发一个控制台应用程序,并决定使用 WPF 切换到图形。控制台应用程序一切正常,但我现在遇到了麻烦。所以基本上,我有这个窗口:

Window 1

当我点击“添加任务”按钮时,这个新窗口打开:Window 2 .我想执行一系列连续的保存任务(该应用程序用于复制目录并最终在用户需要时对其进行加密),为了做到这一点,我将所有复制参数保存在第三个字符串列表中类,其中有一种方法可以运行它们并执行副本。

我想做的是在数据网格中显示用户在 Window1 中输入的所有信息,选择我要执行的保存任务,然后调用当我单击“启动保存”按钮时复制的方法,但我想不通怎么办。我无法从 Window1 中使用 Window2 检索存储在第三类列表中的数据,似乎我什至无法在我制作的列表中存储多个保存参数,一次只能存储一个。 Tbh idk 做什么,我一直在寻找几个小时的方法来做到这一点,但我没有找到任何线索。我很确定我的编码方式是错误的,而且我遗漏了一些重要的逻辑/推理内容(或者只是缺乏知识 idk),所以这就是我来这里寻求帮助的原因。

这是 window1 的代码:

public partial class NewSave : Window
{
SeqSave sqSv1 = new SeqSave();

public NewSave()
{
InitializeComponent();
List<SeqSave> caracSave = new List<SeqSave>();

if (sqSv1.savedNamesList.Count > 0)
{
for (int i = 0; i < sqSv1.savedNamesList.Count; i++)
{
caracSave.Add(new SeqSave() { SaveTaskName = sqSv1.savedNamesList[i], SourcePath = sqSv1.srcPathList[i], DestinationPath = sqSv1.dstPathList[i], SaveType = sqSv1.saveTypeList[i], Backup = sqSv1.didBackupList[i] });
}

saveListsDisplay.ItemsSource = caracSave;
}
}

private void BusinessSoftware(object sender, RoutedEventArgs e)
{
}

private void AddTask(object sender, RoutedEventArgs e)
{
AddTask aT1 = new AddTask();
aT1.Show();
}

private void saveListsDisplay_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
}

private void LaunchSave(object sender, RoutedEventArgs e)
{
//for(int i = 0; i < sqSv1.savedNamesList.Count; i++)
//{
// Console.WriteLine(sqSv1.savedNamesList[i] + "\n"
// + sqSv1.srcPathList[i] + "\n"
// + sqSv1.dstPathList[i] + "\n"
// + sqSv1.saveTypeList[i] + "\n"
// + sqSv1.didBackupList[i]);
//}
sqSv1.launchSave();
}
}

这是 Window2 的代码:

public partial class AddTask : Window
{
List<string> listExtension = new List<string>();
SeqSave sqSv1 = new SeqSave();

public AddTask()
{
InitializeComponent();
}

private void GetSourcePath(object sender, RoutedEventArgs e)
{
FolderBrowserDialog sourcePath = new FolderBrowserDialog();
DialogResult result = sourcePath.ShowDialog();
string strSourcePath = sourcePath.SelectedPath;
sqSv1.srcPathList.Add(strSourcePath);

DirectoryInfo dirInfo = new DirectoryInfo(strSourcePath);

foreach (FileInfo f in dirInfo.GetFiles())
{
if (!listExtension.Contains(f.Extension))
{
listExtension.Add(f.Extension);
}
}

for(int i = 0; i < listExtension.Count; i++)
{
lstB1.Items.Add(listExtension[i]);
}
}

private void GetDestinationPath(object sender, RoutedEventArgs e)
{
FolderBrowserDialog destinationPath = new FolderBrowserDialog();
DialogResult result = destinationPath.ShowDialog();
string strDestinationPath = destinationPath.SelectedPath;
sqSv1.dstPathList.Add(strDestinationPath);
}

private void Encrypt(object sender, RoutedEventArgs e)
{
}

private void Return(object sender, RoutedEventArgs e)
{
}

private void Confirm(object sender, RoutedEventArgs e)
{
sqSv1.savedNamesList.Add(taskNameProject.Text);

if (RadioButton1.IsChecked == true)
{
sqSv1.saveTypeList.Add("1");

}
else if(RadioButton2.IsChecked == true)
{
sqSv1.saveTypeList.Add("2");
}

if (Checkbox1.IsChecked == true)
{
sqSv1.didBackupList.Add(true);
}
else
{
sqSv1.didBackupList.Add(false);
}

MessageBox.Show("Task successfully added.");
this.Visibility = Visibility.Hidden;
}
}

最佳答案

您需要在第二种形式中创建公共(public)属性。我像这样将 public 添加到您的代码中。我还在两种形式中添加了对话结果。

public partial class AddTask : Window
{

public List<string> ListExtension { get; } = new List<string>();
public SeqSave SqSv1 { get; }= new SeqSave();

public AddTask()
{
InitializeComponent();
}
private void GetSourcePath(object sender, RoutedEventArgs e)
{
FolderBrowserDialog sourcePath = new FolderBrowserDialog();
DialogResult result = sourcePath.ShowDialog();
string strSourcePath = sourcePath.SelectedPath;
SqSv1.srcPathList.Add(strSourcePath);

DirectoryInfo dirInfo = new DirectoryInfo(strSourcePath);
foreach (FileInfo f in dirInfo.GetFiles())
{
if (!ListExtension.Contains(f.Extension))
{
ListExtension.Add(f.Extension);
}
}

for(int i = 0; i < ListExtension.Count; i++)
{
lstB1.Items.Add(ListExtension[i]);
}
}

private void GetDestinationPath(object sender, RoutedEventArgs e)
{
FolderBrowserDialog destinationPath = new FolderBrowserDialog();
DialogResult result = destinationPath.ShowDialog();
string strDestinationPath = destinationPath.SelectedPath;
SqSv1.dstPathList.Add(strDestinationPath);
}

private void Encrypt(object sender, RoutedEventArgs e)
{

}
private void Return(object sender, RoutedEventArgs e)
{

}

private void Confirm(object sender, RoutedEventArgs e)
{
SqSv1.savedNamesList.Add(taskNameProject.Text);

if (RadioButton1.IsChecked == true)
{
SqSv1.saveTypeList.Add("1");

}else if(RadioButton2.IsChecked == true)
{
SqSv1.saveTypeList.Add("2");
}
if (Checkbox1.IsChecked == true)
{
SqSv1.didBackupList.Add(true);
}
else
{
SqSv1.didBackupList.Add(false);
}
MessageBox.Show("Task successfully added.");
this.Close();
DialogResult = DialogResult.OK;
}
}

然后像这样以原始形式访问那些:

    private void AddTask(object sender, RoutedEventArgs e)
{
AddTask aT1 = new AddTask();
DialogResult results = aT1.ShowDialog();
if(results == DialogResult.OK)
{
List<string> listExt = aT1.ListExtension;
}
}

关于c# - 在 1 个基本类和 2 个 WPF 窗口之间传递数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59256832/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com