C#中的基本按钮问题

时间:2017-05-14 19:02:41

标签: c# button backup

感谢您花时间阅读本文。我正在使用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
                }

            }
        }





    }

    }

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)项目中,你必须手动为它做好准备,如果你已经学会了做什么,而不是之前就做好了。

例如,  首先,将项目引用添加到以下程序集中:

  • PresentationCore
  • PresentationFramework
  • WindowsBase

第二:添加正确的使用语句,例如

using System.Windows;