0

我正在按照“Programming C# 4.0, 6th edition”中的示例来使用 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.

4

1 回答 1

2

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

Form1.designer.cs在这种情况下将调用设计器文件。您可以通过打开此文件来查看已创建的控件,或者,如果使用 Visual Studio,则可以通过在 Visual Studio 设计器中打开表单来查看。要在 Visual Studio 中打开设计器文件,请展开Form1.cs解决方案资源管理器树视图中的条目,然后双击设计器文件。

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

于 2013-01-22T14:57:14.030 回答