|
При выполнении в лабораторной работе упражнения №1 , а именно при выполнении нижеследующего кода: using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; using Microsoft.Xna.Framework.Graphics;
namespace Application1 { public partial class MainForm : Form { // Объявим поле графического устройства для видимости в методах GraphicsDevice device;
public MainForm() { InitializeComponent();
// Подпишемся на событие Load формы this.Load += new EventHandler(MainForm_Load);
// Попишемся на событие FormClosed формы this.FormClosed += new FormClosedEventHandler(MainForm_FormClosed); }
void MainForm_FormClosed(object sender, FormClosedEventArgs e) { // Удаляем (освобождаем) устройство device.Dispose(); // На всякий случай присваиваем ссылке на устройство значение null device = null; }
void MainForm_Load(object sender, EventArgs e) { // Создаем объект представления для настройки графического устройства PresentationParameters presentParams = new PresentationParameters(); // Настраиваем объект представления через его свойства presentParams.IsFullScreen = false; // Включаем оконный режим presentParams.BackBufferCount = 1; // Включаем задний буфер // для двойной буферизации // Переключение переднего и заднего буферов // должно осуществляться с максимальной эффективностью presentParams.SwapEffect = SwapEffect.Discard; // Устанавливаем размеры заднего буфера по клиентской области окна формы presentParams.BackBufferWidth = this.ClientSize.Width; presentParams.BackBufferHeight = this.ClientSize.Height;
// Создадим графическое устройство с заданными настройками device = new GraphicsDevice(GraphicsAdapter.DefaultAdapter, DeviceType.Hardware, this.Handle, presentParams); }
protected override void OnPaint(PaintEventArgs e) { device.Clear(Microsoft.Xna.Framework.Graphics.Color.CornflowerBlue);
base.OnPaint(e); } } } Выбрасывается исключение: Невозможно загрузить файл или сборку "Microsoft.Xna.Framework, Version=3.0.0.0, Culture=neutral, PublicKeyToken=6d5c3888ef60e27d" или один из зависимых от них компонентов. Не удается найти указанный файл. Делаю все пунктуально. В чем может быть проблема? |
Опубликован: 05.08.2010 | Уровень: специалист | Доступ: свободно
Самостоятельная работа 6:
Редактирование данных OLE DB средствами ADO.NET
-
Добавьте
к проекту WinForms2 новый пустой файл (шаблон Code
File) с именем CreateInterface.cs и
заполните его кодом динамического создания интерфейса
пользователя
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
namespace WinForms2
{
partial class Form1
{
// Динамическое создание элементов первой вкладки
void CreatePage1()
{
TabPage page = new TabPage("Строки");
tabControl.TabPages.Add(page);// Добавили вкладку к панели
// Табличная панель для вертикального выравнивания элементов
TableLayoutPanel tableLayoutPanel = new TableLayoutPanel();
page.Controls.Add(tableLayoutPanel);// Добавили табличную панель к вкладке
tableLayoutPanel.Dock = DockStyle.Fill;
// Рисуем рамку вокруг панели (для красоты)
tableLayoutPanel.CellBorderStyle = TableLayoutPanelCellBorderStyle.Single;
// Панель горизонтального выравнивания
// верхней ячейки табличной панели
FlowLayoutPanel flowLayoutPanel = new FlowLayoutPanel();
flowLayoutPanel.Dock = DockStyle.Top;
flowLayoutPanel.AutoSize = true;
tableLayoutPanel.Controls.Add(flowLayoutPanel);
// Заполняем горизонтальную панель
// Для наглядности группируем в блоки кода
{
// Create ComboBox
flowLayoutPanel.Controls.Add(cbLetters = new ComboBox());// Создаем и добавляем
cbLetters.Anchor = AnchorStyles.None;// Выравнивание по центру родителя
cbLetters.Width = 80;// Зададим ширину
cbLetters.KeyDown += new KeyEventHandler(cbLetters_KeyDown);// Не редактировать
cbLetters.KeyPress += new KeyPressEventHandler(cbLetters_KeyPress);// Не редактировать
cbLetters.SelectedIndexChanged += cbLetters_SelectedIndexChanged;// Выбрать
cbLetters.BindingContextChanged += cbLetters_SelectedIndexChanged;// Для начальной загрузки
// Всплывающая подсказка
ToolTip toolTip = new ToolTip();
String message = "Фильтр записей таблицы";
toolTip.SetToolTip(cbLetters, message);
toolTip.IsBalloon = true;
//toolTip.ToolTipIcon = ToolTipIcon.Info;
//toolTip.ForeColor = Color.Magenta;
//toolTip.BackColor = Color.LightGoldenrodYellow;
}
{
// Create Button
flowLayoutPanel.Controls.Add(button = new Button());// Создаем и добавляем
button.Anchor = AnchorStyles.None;// Выравнивание по центру родителя
button.Text = "Delete";
button.AutoSize = true;
// Регистрируем обработчик события Click
button.Click += button_DeleteClick;
// Всплывающая подсказка
ToolTip toolTip = new ToolTip();
String message = "Удаление текущей записи";
toolTip.SetToolTip(button, message);
toolTip.IsBalloon = true;
// Create Button
button = new Button();
button.Parent = flowLayoutPanel; // Добавляем к табличной панели
button.Anchor = AnchorStyles.None;// Выравнивание по центру родителя
button.Text = "Restore";
button.AutoSize = true;
// Регистрируем обработчик события Click
button.Click += button_RestoreClick;
// Всплывающая подсказка
toolTip = new ToolTip();
message = "Восстановление\nнесохраненных\nизменений";
toolTip.SetToolTip(button, message);
toolTip.IsBalloon = true;
// Create Button
button = new Button();
button.Parent = flowLayoutPanel; // Добавляем к табличной панели
button.Anchor = AnchorStyles.None;// Выравнивание по центру родителя
button.Text = "Update";
button.AutoSize = true;
// Регистрируем обработчик события Click
button.Click += button_UpdateClick;
// Всплывающая подсказка
toolTip = new ToolTip();
message = "Запись в БД";
toolTip.SetToolTip(button, message);
toolTip.IsBalloon = true;
}
// Список размещаем под горизонтальной панелью
tableLayoutPanel.Controls.Add(listBox = new ListBox());
listBox.Dock = DockStyle.Fill;
listBox.Margin = new Padding(0);// Убираем отступы вокруг списка
tableLayoutPanel.Padding = new Padding(0);// Убираем отступы внутри панели
}
void cbLetters_KeyPress(object sender, KeyPressEventArgs e)
{
e.Handled = true;
}
void cbLetters_KeyDown(object sender, KeyEventArgs e)
{
e.Handled = true;
}
// Динамическое создание элементов второй вкладки
void CreatePage2()
{
TabPage page = new TabPage("Поля");
tabControl.TabPages.Add(page);// Добавили вкладку к панели
TableLayoutPanel tablePanel = new TableLayoutPanel();// Табличная панель
tablePanel.Parent = page;// Назначили родителя
tablePanel.Dock = DockStyle.Fill;// На всю вкладку
FlowLayoutPanel flowPanel = new FlowLayoutPanel();// Горизонтальная панель
flowPanel.Parent = tablePanel;// Назначили родителя
flowPanel.Dock = DockStyle.Top;// Пристыковали вверх к родителю
flowPanel.AutoSize = true;// По размеру содержимого
flowPanel.BorderStyle = BorderStyle.Fixed3D;// Красиво тесненная
TableLayoutPanel tmp = new TableLayoutPanel();
tmp.Parent = tablePanel;
tmp.Dock = DockStyle.Fill;
tablePanel = tmp;// Бросили внешнюю панель
tmp = null;
//tablePanel.CellBorderStyle = TableLayoutPanelCellBorderStyle.Single;// Рамка
// Заполняем верхнюю панель
Button button = new Button();
button.Text = "Current";
button.AutoSize = true;
button.Parent = flowPanel;
button.Click += button_CurrentClick;
// Всплывающая подсказка
ToolTip toolTip = new ToolTip();
String message = "Заполнение полей\nзначениями текущей записи";
toolTip.SetToolTip(button, message);
toolTip.IsBalloon = true;
button = new Button();
button.Text = "NewRow";
button.AutoSize = true;
button.Parent = flowPanel;
button.Click += button_NewRowClick;
// Всплывающая подсказка
toolTip = new ToolTip();
message = "Создание новой записи";
toolTip.SetToolTip(button, message);
toolTip.IsBalloon = true;
// Используем ту же ссылку для создания другой кнопки
button = new Button();
button.Text = "AddRow";
button.AutoSize = true;
button.Parent = flowPanel;
button.Click += button_AddRowClick;
// Всплывающая подсказка
toolTip = new ToolTip();
message = "Сохранение новой\nзаписи в таблице";
toolTip.SetToolTip(button, message);
toolTip.IsBalloon = true;
button = new Button();
button.Text = "Clear";
button.AutoSize = true;
button.Parent = flowPanel;
button.Click += button_ClearClick;
// Всплывающая подсказка
toolTip = new ToolTip();
message = "Очистить поля/Отменить запись";
toolTip.SetToolTip(button, message);
toolTip.IsBalloon = true;
Label label = new Label();
label.Text = "Поля для редактирования записи:";
label.AutoSize = true;
label.Parent = tablePanel;
CreateTextBox(tablePanel);
// Собираем ссылки на все TextBox формы, так как
// на форме нет других TextBox, ненужных нам!!!
FindTextBox(this.Controls);
}
// Динамически добавляем поля во вторую вкладку
void CreateTextBox(TableLayoutPanel panel)
{
String[] columnName = {
"CustomerID",
"CompanyName",
"Address",
"City",
"Phone"
};
for (int i = 0; i < columnName.Length; i++)
{
FlowLayoutPanel flowPanel = new FlowLayoutPanel();
flowPanel.Dock = DockStyle.Top;
flowPanel.AutoSize = true;
flowPanel.Parent = panel;
Label label = new Label();
label.AutoSize = true;
label.Text = columnName[i] + ":";
label.Anchor = AnchorStyles.None;// Выравнивание по центру горизонтали
label.Parent = flowPanel;
TextBox txtBox = new TextBox();
txtBox.Name = columnName[i];
txtBox.Width = 200;
txtBox.Parent = flowPanel;
}
}
// Рекурсивный поиск всех объектов TextBox
// в дереве коллекций, начиная от текущего корня
// System.Collections.ArrayList list =
// new System.Collections.ArrayList(); - можно и этот, только он
// работает с типом Object и нужно будет явно повышать полномочия ссылки
List<TextBox> listReference = new List<TextBox>();// Типизированный список
void FindTextBox(Control.ControlCollection controls)
{
foreach (Control ctrl in controls)
{
if (ctrl is TextBox)
{
listReference.Add((TextBox)ctrl);
}
if (ctrl.Controls != null)
{
FindTextBox(ctrl.Controls);// Рекурсия!!!
}
}
}
}
}-
Запустите
проект и проверьте заложенную в нем функциональность
Два снимка экрана, иллюстрирующие интерфейс приложения, выглядят так

