Windows窗体变量自动生成

时间:2013-01-22 14:54:11

标签: c# winforms visual-studio-2010

我正在使用“编程C#4.0,第6版”中的示例来处理Windows窗体,但我发现我无法理解实际发生的情况。我有3个文件 一个Main()

using System;
using System.Collections.Generic;
using System.Linq;
using System.Windows.Forms;

namespace ToDoList
{
    static class Program
    {
        /// <summary>
        /// The main entry point for the application.
        /// </summary>
        [STAThread]
        static void Main()
        {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            Application.Run(new Form1());
        }
    }
}

使用表格的字段:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;


    public class ToDoEntry
    {
        public string Title { get; set; }
        public string Description { get; set; }
        public DateTime DueDate { get; set; }


}

表格本身:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace ToDoList
{
    public partial class Form1 : Form
    {

        private BindingList<ToDoEntry> entries = new BindingList<ToDoEntry>();

        public Form1()
        {
            InitializeComponent();
            entriesSource.DataSource = entries;
            CreateNewItem();
        }

        private void bindingSource1_CurrentChanged(object sender, EventArgs e)
        {

        }

        private void textBox1_TextChanged(object sender, EventArgs e)
        {

        }

        private void listView1_SelectedIndexChanged(object sender, EventArgs e)
        {

        }

        private void CreateNewItem()
        {
            ToDoEntry newEntry = (ToDoEntry)entriesSource.AddNew();
            newEntry.Title = "New entry";
            newEntry.DueDate = DateTime.Now;
            entriesSource.ResetCurrentItem();
        }

        private void entriesSource_ListChanged(object sender, ListChangedEventArgs e)
        {
            switch (e.ListChangedType)
            {
                case ListChangedType.ItemAdded:
                    MakeListViewItemForNewEntry(e.NewIndex);
                    break;
                case ListChangedType.ItemDeleted:
                    RemoveListViewItem(e.NewIndex);
                    break;
                case ListChangedType.ItemChanged:
                    UpdateListViewItem(e.NewIndex);
                    break;
            }
        }

        private void MakeListViewItemForNewEntry(int newItemIndex)
        {
            ListViewItem item = new ListViewItem();
            item.SubItems.Add("");
            entriesListView.Items.Insert(newItemIndex, item);
        }

        private void UpdateListViewItem(int itemIndex)
        {
            ListViewItem item = entriesListView.Items[itemIndex];
            ToDoEntry entry = entries[itemIndex];
            item.SubItems[0].Text = entry.Title;
            item.SubItems[1].Text = entry.DueDate.ToShortDateString();
        }

        private void RemoveListViewItem(int deletedItemIndex)
        {
            entriesListView.Items.RemoveAt(deletedItemIndex);
        }
    }
}

我的问题是说当前上下文中不存在名称entriesListView。这是事实,但例如entriesSource.DataSource = entries;

我也没有entriesSource,但出于某种原因我可以使用它。现在我不确定缺少的类(至少我认为它应该是一个类)是VS2010(是的,我使用的是Visual Studio 2010)应该生成但是 - 为什么它没有。

是我应该手动编写的东西,但是,在示例中没有关于此内容的任何内容,我也不知道如何定义entriesListView

1 个答案:

答案 0 :(得分:2)

这些变量由Visual Studio在设计器文件中创建。这是通过使用partial关键字来完成的,这是C#中的一项功能,允许您将类定义拆分为两个或多个文件。

在此实例中,设计器文件将被称为Form1.designer.cs。您可以通过打开此文件来查看已创建的控件,或者,如果使用Visual Studio,则可以通过在Visual Studio Designer中打开表单来查看。要在Visual Studio中打开设计器文件,请展开Solution Explorer TreeView中的Form1.cs条目,然后双击设计器文件。

在上面的代码中,问题似乎是entriesListView变量不存在。它可能是在某一点创建的,然后被删除(这甚至可能由于Visual Studio错误而无意中发生)。向表单添加新的ListView并将Name属性设置为entriesListView可以解决问题。