感谢您花时间阅读本文。我正在使用Visual Studio创建一个程序,该程序将使用Visual Studio 2017将多个闪存驱动器备份配置文件存储到C#GUI中的按钮。事实上,我遇到了一些我无法弄清楚的错误,主要是因为这是我第一次使用C#和一些隐藏在Microsoft的代码。
- 第一个错误涉及Controls.Add没有显示按钮,即使每个在线消息来源告诉我这是如何在主窗口的第78行添加按钮。
- 第二个涉及到我不知道如何在主窗口的第76行给出一个按钮的方法。
代码: 的 Profile.cs
using System;
using Microsoft.VisualBasic.FileIO;
public class Profile
{
private string mySource, myDestination, myName;
public Profile()
{
myName = myDestination = mySource = "";
}
public Profile(string name, string source, string destination)
{
myName = name;
mySource = source;
myDestination = destination;
using (System.IO.StreamWriter file =
new System.IO.StreamWriter(@"C:\Users\Scott\Documents\Visual Studio 2017\Projects\WpfApp1\profiles.txt"))
{
file.WriteLine(myName);
file.WriteLine(mySource);
file.WriteLine(myDestination);
file.WriteLine("\n");
}
}
public void backup()
{
try
{
FileSystem.CopyDirectory(mySource, myDestination,
UIOption.AllDialogs);
}
catch (System.IO.IOException e)
{
Console.WriteLine(e.Message);
}
}
public String getName()
{
return myName;
}
}
MainWindow.xaml.cs
using System;
using System.Windows;
using System.Windows.Controls;
using System.IO;
namespace WpfApp1
{
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
refresh();
}
private void Button_Click(object sender, RoutedEventArgs e)
{
Console.WriteLine("Enter the name of the profile: ");
string name = Console.ReadLine();
Console.WriteLine("Enter the folder which you want to copy (ENTER EXACTLY AS IN FILE SYSTEM): ");
string source = Console.ReadLine();
Console.WriteLine("Enter backup destination (ENTER EXACTLY AS IN FILE SYSTEM): ");
string destination = Console.ReadLine();
refresh();
}
private void Button_Click_1(object sender, RoutedEventArgs e)
{
Console.WriteLine("Enter the EXACT name of the profile you want to delete: ");
string line = Console.ReadLine();
string[] lines = File.ReadAllLines(@"C:\Users\Scott\Documents\Visual Studio 2017\Projects\WpfApp1\profiles.txt");
for (int i = 0; lines[i] != null; i += 1)
{
if (lines[i] == line)
{
lines[i] = lines[i + 1] = lines[i + 2] = "";
i += 2;
}
}
File.WriteAllLines(@"C:\Users\Scott\Documents\Visual Studio 2017\Projects\WpfApp1\profiles.txt", lines);
}
private void ButtonBackup(Profile pro)
{
pro.backup();
}
public void refresh()
{
string[] lines = File.ReadAllLines(@"C:\Users\Scott\Documents\Visual Studio 2017\Projects\WpfApp1\profiles.txt");
String reader = "placeholder";
int i = 0;
while (reader != null)
{
reader = lines[i];
i += 1;
if (reader != "\n")
{
String name = reader;
reader = lines[i];
i += 1;
String source = reader;
reader = lines[i];
String destination = reader;
i++;
Profile newprofile = new Profile(name, source, destination);
Button b = new Button();
b.Name = name;
b.Click += new EventHandler(ButtonBackup(newprofile); //error 1
System.Windows.Controls.Add(b); //error 2
}
}
}
}
}
答案 0 :(得分:2)
您确定,您刚刚以正确的方式创建了WPF应用程序吗? (File / New / Project .. Templates / Windows Classic Desktop ..)
最后点击 WPF应用,一切都正确配置为使用WPF,特别是按钮; - )
请创建一个这样的新项目,然后在其他任何地方创建按钮。
你似乎在不了解WPF的情况下开始了,所以通过一些例子阅读或观看它的内容可能很有用。
如果项目是新鲜的,最简单的方法是转到文件 MainWindow.xaml ,切换到最左侧的工具箱,然后拖动按钮到窗口。 (如果没有“工具箱”,请使用菜单添加View / Toolbox)。)
Xaml Code将包含以下内容:
> <Grid>
> <Button>
> <Button Content="Button" Width="75"/>
> </Button>
> </Grid>
然后双击设计器视图中的按钮(而不是xml代码:-),Visual Studio将自动为您创建按钮事件处理函数并将光标放在那里:
private void Button_Click(object sender, RoutedEventArgs e)
{
}
在MainWindow.xaml.cs文件中,您会发现许多使用语句,尤其是。 using System.Windows.Controls;
,但您可以通过鼠标右键单击和“删除并排序使用”来删除它们。
在此之后,您已经证明了自己不需要System.Windows.Controls来处理工具箱上可用的“Button”之类的简单控件!
答案 1 :(得分:0)
我把它移到了另一个答案,因为我担心这会误导初学者。通常,您不必以初学者身份执行以下操作,因为建议您从准备好所有内容的新WPF项目开始。但是如果您了解更多,则可以手动将WPF内容添加到项目中。为:
只需将其余代码复制到此新项目中即可。
如果你想留在已经创建的另一个(但不适用于WPF)项目中,你必须手动为它做好准备,如果你已经学会了做什么,而不是之前就做好了。
例如, 首先,将项目引用添加到以下程序集中:
第二:添加正确的使用语句,例如
using System.Windows;