РAЗДЕЛ 5. WEB-ПРОГРАММИРОВАНИЕ В NET(Расширенные возможности)

ЛЕКЦИЯ 8. СОЗДАНИЕ ASP.NET-СЦЕНАРИЕВ

предыдущий_раздел следующий_раздел следующая_лекция

предыдущая лекция

Список лекций

Создадим заготовку приложения WEB ASP (см.рис.8.1)

РAЗДЕЛ 5. WEB-ПРОГРАММИРОВАНИЕ В NET(Расширенные возможности) - student2.ru

Рис.8.1

Вручную напишем следующий код Web-страницы:

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="web2._Default" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >

<head runat="server">

<title>Untitled Page</title>

</head>

<body bgcolor=#aabbcc>

<center>

<h2>

<font color=red>

LESSON 1</font>

<hr width=800 />

</h2>

</center>

<form id="form1" runat="server">

<div>

</div>

</form>

</body>

</html>

РAЗДЕЛ 5. WEB-ПРОГРАММИРОВАНИЕ В NET(Расширенные возможности) - student2.ru Этот код набираем в окне Source (Рис.8.2)

РAЗДЕЛ 5. WEB-ПРОГРАММИРОВАНИЕ В NET(Расширенные возможности) - student2.ru

Рис.8.2

Откроем этот документ в броузере через Run – Run Without debugging

РAЗДЕЛ 5. WEB-ПРОГРАММИРОВАНИЕ В NET(Расширенные возможности) - student2.ru

Броузер отобразит созданное окно на рис 8.3.

РAЗДЕЛ 5. WEB-ПРОГРАММИРОВАНИЕ В NET(Расширенные возможности) - student2.ru

Рис.8.3

Теперь добавим в сайт пользовательский элемент управления, вызвав контекстное меню щелчком правой кнопкт мыши на элементе web2 (название проекта) и выбра пункт Add- New Item- Web user control:

РAЗДЕЛ 5. WEB-ПРОГРАММИРОВАНИЕ В NET(Расширенные возможности) - student2.ru

Рис.8.4

В поле Name введем myuserctrl1.

Система отобразит следующее окно

РAЗДЕЛ 5. WEB-ПРОГРАММИРОВАНИЕ В NET(Расширенные возможности) - student2.ru

с текстом

<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="myctrl1.ascx.cs" Inherits="web2.myctrl1" %>

Расширим этот текст следующим образом:

<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="myctrl1.ascx.cs" Inherits="web2.myctrl1" %>

<table cellspacing="4">

<tr valign=middle>

<td>

<asp:Image runat="server" ID="suitPic" ImageUrl="e:\work\toad1.bmp" />

</td>

<td>

<asp:Label runat="server" ID="suitLabel">

To do something

</asp:Label></td>

</tr>

</table>

После этого с помощью мыши перетащим данный элемент на форму (рис.8.5):

РAЗДЕЛ 5. WEB-ПРОГРАММИРОВАНИЕ В NET(Расширенные возможности) - student2.ru РAЗДЕЛ 5. WEB-ПРОГРАММИРОВАНИЕ В NET(Расширенные возможности) - student2.ru

Рис.8.5

Система создаст следующий код в основном документе – default.aspx

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="web2._Default" %>

<%@ Register src="myctrl1.ascx" tagname="myctrl1" tagprefix="uc1" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >

<head runat="server">

<title>Untitled Page</title>

</head>

<body bgcolor=#aabbcc>

<form id="form1" runat="server">

<center>

<h2>

<font color=red>

LESSON 1</font>

<hr width="800" />

</h2>

</center>

<div>

<uc1:myctrl1 ID="myctrl11" runat="server" />

</div>

</form>

</body>

</html>

Оттестируем приложение:

РAЗДЕЛ 5. WEB-ПРОГРАММИРОВАНИЕ В NET(Расширенные возможности) - student2.ru

Рис.8.6

Теперь надо придать нашему элементу некоторую функциональность. Сначала добавим список радиокнопок:

РAЗДЕЛ 5. WEB-ПРОГРАММИРОВАНИЕ В NET(Расширенные возможности) - student2.ru

Исходный текст документа претерпит следующие изменения:

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="web2._Default" %>

<%@ Register src="myctrl1.ascx" tagname="myctrl1" tagprefix="uc1" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >

<head runat="server">

<title>Untitled Page</title>

</head>

<body bgcolor=#aabbcc>

<form id="form1" runat="server">

<center>

<h2>

<font color=red>

LESSON 1</font>

<hr width="800" />

</h2>

</center>

<div>

<uc1:myctrl1 ID="myctrl11" runat="server" />

<asp:RadioButtonList runat="server" ID="suitList" AutoPostBack="true">

<asp:ListItem Value="e:\work\toad1.bmp" Selected="True">TOAD1</asp:ListItem>

<asp:ListItem Value="e:\work\toad2.bmp" >TOAD2</asp:ListItem>

</asp:RadioButtonList>

</div>

</form>

</body>

</html>

Для написания кода реакции на радиокнопку щелкним по радиокнопке дважды. Откроется следующий редактор

using System;

using System.Collections;

using System.Configuration;

using System.Data;

using System.Linq;

using System.Web;

using System.Web.Security;

using System.Web.UI;

using System.Web.UI.HtmlControls;

using System.Web.UI.WebControls;

using System.Web.UI.WebControls.WebParts;

using System.Xml.Linq;

namespace web2

{

public partial class _Default : System.Web.UI.Page

{

protected void Page_Load(object sender, EventArgs e)

{

}

protected void suitList_SelectedIndexChanged(object sender, EventArgs e)

{

}

}

}

Нас интересует событие SelectedIndexChanged. Чтобы это событие обработать, мы расширяем определение класса нашего элемента myCtrl:

using System.Web.UI.WebControls;

using System.Web.UI.WebControls.WebParts;

using System.Xml.Linq;

namespace web2

{

public partial class myctrl1 : System.Web.UI.UserControl

{

protected string currentpic = @"e:\work\toad1.bmp";

public string Suit

{

get

{

return currentpic;

}

set

{

currentpic = value;

suitLabel.Text = value;

suitPic.ImageUrl = value;

}

}

protected void Page_Load(object sender, EventArgs e)

{

}

}

}

Теперь нетрудно запрограммировать и сам обработчик события web2.default.aspx.cs:

using System.Web.Security;

using System.Web.UI;

using System.Web.UI.HtmlControls;

using System.Web.UI.WebControls;

using System.Web.UI.WebControls.WebParts;

using System.Xml.Linq;

namespace web2

{

public partial class _Default : System.Web.UI.Page

{

protected void Page_Load(object sender, EventArgs e)

{

}

public void suitList_SelectedIndexChanged(object sender, EventArgs e)

{

myctrl11.Suit = (string) suitList.SelectedItem.Value.ToString();

}

}

}

Тем самым мы добавили в сайт собственный элемент и запрограммировали его обработку.

ЛЕКЦИЯ 9. ЭЛЕМЕНТЫ УПРАВЛЕНИЯ AJAX В ASP.NET

предыдущий_раздел следующий_раздел следующая_лекция

предыдущая лекция

Список лекций

Создадим Web-проект, как описано в предыдущей лекции и вставим в него элементы управления AJAX. Текст оазрабатываемой нами страницы сделаем таким:

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="PCSAjaxWebApp1._Default" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >

<head runat="server">

<title>Untitled Page</title>

</head>

<body>

<form id="form1" runat="server">

<asp:ScriptManager ID="ScriptManager1" runat="server" />

<div>

<h1>

LESSON OF ASP.NET AJAX

</h1>

<br />

Maximum:

<asp:TextBox runat="server" ID="MaxValue" Text="2500" />

<br />

Result:

<asp:UpdatePanel runat="server" ID="ResultPanel">

<ContentTemplate>

<asp:Button runat="server" ID="GoButton" Text="Calculate" />

<br />

<asp:Label runat="server" ID="ResultrLabel"/>

<br />

<small>

Panel render Time=<%=DateTime.Now.ToString() %>

</small>

</ContentTemplate>

</asp:UpdatePanel>

<asp:UpdateProgress runat="server" ID="UpdateProgress1">

<ProgressTemplate>

<div style="position:absolute;left:100px;top:200px;padding:40px 60px 40px 60px;background-color:lightyellow;

font-size:larger;filter:alpha(opacity=80);">

Updating ....

</div>

</ProgressTemplate>

</asp:UpdateProgress>

<small>Page render Time2=<% =DateTime.Now.ToString() %></small>

</div>

</form>

</body>

</html>

Запустим это приложение и получим следующий скриншот (рис.9.1)

РAЗДЕЛ 5. WEB-ПРОГРАММИРОВАНИЕ В NET(Расширенные возможности) - student2.ru

Рис. 9.1

Обратим предварительно внимание на то, что две строки времени дают одинаковое значение. Напишем обработчик кнопки Calculate:

using System;

using System.Collections;

using System.Configuration;

using System.Data;

using System.Linq;

using System.Web;

using System.Web.Security;

using System.Web.UI;

using System.Web.UI.HtmlControls;

using System.Web.UI.WebControls;

using System.Web.UI.WebControls.WebParts;

using System.Xml.Linq;

namespace PCSAjaxWebApp1

{

public partial class _Default : System.Web.UI.Page

{

protected void Page_Load(object sender, EventArgs e)

{

}

protected void GoButton_Click(object sender, EventArgs e)

{

int maxValue = 0;

System.Text.StringBuilder resultText = new System.Text.StringBuilder();

if (int.TryParse(MaxValue.Text, out maxValue))

{

for (int trial = 2; trial < maxValue; trial++)

{

bool isPrime = true;

for (int divisor = 2; divisor <= Math.Sqrt(trial); divisor++)

{

if (trial % divisor == 0)

{

isPrime = false;

break;

}

}

if (isPrime)

{

resultText.AppendFormat("{0}, ", trial);

}

}

}

else

{

resultText.Append("Unable to parse maximum value");

}

ResultrLabel.Text=resultText.ToString();

}

}

}

Теперь результат работы прораммы будет таким (рис 9.2)

РAЗДЕЛ 5. WEB-ПРОГРАММИРОВАНИЕ В NET(Расширенные возможности) - student2.ru

Рис.9.2

Мы видим, что времена в двух нижних строках не совпадают. Теперь об AJAX. Мы добавляем функциональность AJAX с помощью тега

<asp:ScriptManager ID="ScriptManager1" runat="server" />.

Кроме того, мы включаем динамические элементы управления AJAX вроде

<asp:UpdatePanel runat="server" ID="ResultPanel">

или

<asp:UpdateProgress runat="server" ID="UpdateProgress1">.

При взаимодействии WEB-клиента и WEB-сервера страница WEB клиента может быть динамически изменена после передачи соответствующего запроса на сервер и получения ответа.

AJAX позволяет обновлять содержимое части страницы (клиента) динамически .

Элемент

<asp:UpdatePanel runat="server" ID="ResultPanel">

и определяет динамически обновляемую часть WEB-страницы. Эта часть обычно вставляется в тег <div>, следующий после <ContentTemplate>.

Можно вставить собственные элементы управления Ajax в проект С#. для этого следует скачать из интернета соответствующую библиотеку. Вот как это сделать.

Скачайте AJAX Toolkit .NET 4 “Apr 12 2010” по ссылке: http://ajaxcontroltoolkit.codeplex.com/releases/view/43475#DownloadId=116534, Once downloaded,

Распакуйте архивный файл AjaxControlToolkit.Binary.NET4 , а также архивную папку AjaxControlToolkitSampleSite на какую-нибудь вашу папку.

В среде Visual Studio откройте окно ToolBox, нажмите правой кнопокй мыши на свободном месте и выберите

Add Tab. Назовите новый таб типа ajaxControls.

РAЗДЕЛ 5. WEB-ПРОГРАММИРОВАНИЕ В NET(Расширенные возможности) - student2.ru

Нажмите правой кнопкой мыши внизу созданного таба и выберите Choose Items:

РAЗДЕЛ 5. WEB-ПРОГРАММИРОВАНИЕ В NET(Расширенные возможности) - student2.ru

Выберите папку NET и нажмите кнопку Browse. Найдите каталог с распакованными вами файлами и нажмите Add:

РAЗДЕЛ 5. WEB-ПРОГРАММИРОВАНИЕ В NET(Расширенные возможности) - student2.ru

Теперь вы можете работать с элементами управления Ajax. Вставьте в окно элемент ComboBox и задайте его содержимое

РAЗДЕЛ 5. WEB-ПРОГРАММИРОВАНИЕ В NET(Расширенные возможности) - student2.ru

Программа создаст следующий код:

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="AJAX2WEB._Default" %>

<%@ Register assembly="AjaxControlToolkit" namespace="AjaxControlToolkit" tagprefix="asp" %>

<%@ Register assembly="AjaxControlToolkit" namespace="AjaxControlToolkit.HTMLEditor" tagprefix="cc1" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >

<head runat="server">

<title>Untitled Page</title>

</head>

<body>

<form id="form1" runat="server">

<asp:ScriptManager ID="ScriptManager1" runat="server" />

<div>

<h1>

LESSON 2 OF ASP.NET AJAX

</h1>

<br />

<span style="display:inline; padding:2px;">

My favorite color is:

</span>

<br />

<asp:Panel runat="server" ID="ResultPanel" Height="16px" Width="146px">

<asp:ComboBox ID="ComboBox1" runat="server">

<asp:ListItem Selected="True">red</asp:ListItem>

<asp:ListItem>green</asp:ListItem>

</asp:ComboBox>

</asp:Panel>

</div>

</form>

Запустите его на выполнение:

РAЗДЕЛ 5. WEB-ПРОГРАММИРОВАНИЕ В NET(Расширенные возможности) - student2.ru

Напишем простой обработчик события изменения содержимого комбосписка.

using System;

using System.Collections;

using System.Configuration;

using System.Data;

using System.Linq;

using System.Web;

using System.Web.Security;

using System.Web.UI;

using System.Web.UI.HtmlControls;

using System.Web.UI.WebControls;

using System.Web.UI.WebControls.WebParts;

using System.Xml.Linq;

using System.Drawing;

namespace AJAX2WEB

{

public partial class _Default : System.Web.UI.Page

{

protected void Page_Load(object sender, EventArgs e)

{

}

protected void ComboBox1_SelectedIndexChanged(object sender, EventArgs e)

{

Color red,yellow;

red=Color.Coral;

yellow=Color.Yellow;

if (ComboBox1.Items[ComboBox1.SelectedIndex].Value.ToString() == "red")

ComboBox1.BackColor = red;

else

ComboBox1.BackColor = yellow;

}

}

}

Теперь при выборе из списка цвет комбобокса изменяется согласно выбранному элементу.

ЛЕКЦИЯ 10. WEB-СЕРВИСЫ

предыдущий_раздел следующий_раздел следующая_лекция

предыдущая лекция

Список лекций

Отличие WEB-сервисов от ASP.NET-приложений состоит в том, что WEB-сервисы используют компоненты COM, а не скрипты. Таким образом, можно включить в приложение класс, объявленный в компоненте COM, и использовать его методы. Создание WEB-сервиса производится на основе конфигурационных файлов XML. Рассмотрим простой пример. Предполагается, что сервер IIS запущен.

1. Выберем File-> New Project -> ASP.NET Web Service

2. Выберем закладку, соответствующую файлу .cs. Из меню выберем View Code по щелчку правой кнопкой мыши. При этом откроется окно редактора кода:

using System;

using System.Collections;

using System.ComponentModel;

using System.Data;

using System.Diagnostics;

using System.Web;

using System.Web.Services;

namespace WebService2

{

/// <summary>

/// Summary description for Service1.

/// </summary>

public class Service1 : System.Web.Services.WebService

{

public Service1()

{

//CODEGEN: This call is required by the ASP.NET Web Services Designer

InitializeComponent();

}

#region Component Designer generated code

//Required by the Web Services Designer

private IContainer components = null;

/// <summary>

/// Required method for Designer support - do not modify

/// the contents of this method with the code editor.

/// </summary>

private void InitializeComponent()

{

}

/// <summary>

/// Clean up any resources being used.

/// </summary>

protected override void Dispose( bool disposing )

{

if(disposing && components != null)

{

components.Dispose();

}

base.Dispose(disposing);

}

#endregion

// WEB SERVICE EXAMPLE

// The HelloWorld() example service returns the string Hello World

// To build, uncomment the following lines then save and build the project

// To test this web service, press F5

// [WebMethod]

// public string HelloWorld()

// {

// return "Hello World";

// }

}

}

Откроем комментарии (//), начиная со строки [WebMethod].

3.Запустим этот Web-сервис на выполнение (<CTRL>+F5). Откроется окно, показанное на рис.10.1

РAЗДЕЛ 5. WEB-ПРОГРАММИРОВАНИЕ В NET(Расширенные возможности) - student2.ru

Рис.10.1

4.Перейдем по гиперссылке HelloWorld.

5.В окне 10.2 увидим результат. При нажатии на кнопку Invoke получим результат в форме XML-документа.

РAЗДЕЛ 5. WEB-ПРОГРАММИРОВАНИЕ В NET(Расширенные возможности) - student2.ru

Рис.10.2

Реализуем более сложный вариант сервиса. Именно, пусть web-сервис возвращает строку, переданную клиентом. Изменим несколько текст нашего сервиса

using System;

using System.Collections;

using System.ComponentModel;

using System.Data;

using System.Diagnostics;

using System.Web;

using System.Web.Services;

namespace WebService2

{

/// <summary>

/// Summary description for Service1.

/// </summary>

public class Service1 : System.Web.Services.WebService

{

public Service1()

{

//CODEGEN: This call is required by the ASP.NET Web Services Designer

InitializeComponent();

}

#region Component Designer generated code

//Required by the Web Services Designer

private IContainer components = null;

/// <summary>

/// Required method for Designer support - do not modify

/// the contents of this method with the code editor.

/// </summary>

private void InitializeComponent()

{

}

/// <summary>

/// Clean up any resources being used.

/// </summary>

protected override void Dispose( bool disposing )

{

if(disposing && components != null)

{

components.Dispose();

}

base.Dispose(disposing);

}

#endregion

// WEB SERVICE EXAMPLE

// The HelloWorld() example service returns the string Hello World

// To build, uncomment the following lines then save and build the //project

// To test this web service, press F5

[WebMethod]

public string HelloWorld(String s)

{

return ("Received "+s);

}

}

}

Видим, что в метод HelloWorld передается в качестве параметра текстовая строка. Эта строка возвращается методом. Скомпилируем сервис с помощью комбинации клавиш <Ctrl>+F5. Теперь создадим обычное приложение на основе формы (Рис.10.3).

РAЗДЕЛ 5. WEB-ПРОГРАММИРОВАНИЕ В NET(Расширенные возможности) - student2.ru

Рис.10.3

На этом рисунке показан результат обращения к сервису по нажатию на кнопку. Наше Windows-приложение имеет следующий вид.

using System;

using System.Drawing;

using System.Collections;

using System.ComponentModel;

using System.Windows.Forms;

using System.Data;

using WindowsAppWithService.localhost;

namespace WindowsAppWithService

{

/// <summary>

/// Summary description for Form1.

/// </summary>

public class Form1 : System.Windows.Forms.Form

{

private System.Windows.Forms.Button button1;

/// <summary>

/// Required designer variable.

/// </summary>

private System.ComponentModel.Container components = null;

public Form1()

{

//

// Required for Windows Form Designer support

//

InitializeComponent();

//

// TODO: Add any constructor code after InitializeComponent call

//

}

/// <summary>

/// Clean up any resources being used.

/// </summary>

protected override void Dispose( bool disposing )

{

if( disposing )

{

if (components != null)

{

components.Dispose();

}

}

base.Dispose( disposing );

}

#region Windows Form Designer generated code

/// <summary>

/// Required method for Designer support - do not modify

/// the contents of this method with the code editor.

/// </summary>

private void InitializeComponent()

{

this.button1 = new System.Windows.Forms.Button();

this.SuspendLayout();

//

// button1

//

this.button1.BackColor = System.Drawing.Color.FromArgb(((System.Byte)(255)), ((System.Byte)(192)), ((System.Byte)(192)));

this.button1.Location = new System.Drawing.Point(312, 32);

this.button1.Name = "button1";

this.button1.Size = new System.Drawing.Size(136, 24);

this.button1.TabIndex = 0;

this.button1.Text = "CallService";

this.button1.Click += new System.EventHandler(this.button1_Click);

//

// Form1

//

this.AutoScaleBaseSize = new System.Drawing.Size(5, 13);

this.BackColor = System.Drawing.Color.FromArgb(((System.Byte)(192)), ((System.Byte)(255)), ((System.Byte)(192)));

this.ClientSize = new System.Drawing.Size(480, 373);

this.Controls.Add(this.button1);

this.Name = "Form1";

this.Text = "Form1";

this.ResumeLayout(false);

}

#endregion

/// <summary>

/// The main entry point for the application.

/// </summary>

[STAThread]

static void Main()

{

Application.Run(new Form1());

}

private void button1_Click(object sender, System.EventArgs e)

{

Service1 ser=new localhost.Service1();

String s=ser.HelloWorld("Spring Now!!!");

MessageBox.Show(s);

}

}

}

В это приложение необходимо добавить ссылку (reference) на метод HelloWorld построенного сервиса. Для добавления ссылки в окне Solution Explorer активизируем контекстное меню на элементе References и выберем п. Add Web Reference. Затем в новом окне выберем пункт Web Services On Local Machine. Затем появится новое окно (Рис.10.4), в котором выберем имя нашего сервиса и нажмем кнопку Add Referernce. После этого правомочно адресоваться к классу Service1 в программе обработки события от кнопки:

private void button1_Click(object sender, System.EventArgs e)

{

Service1 ser=new localhost.Service1();

String s=ser.HelloWorld("Spring Now!!!");

MessageBox.Show(s);

}

}

РAЗДЕЛ 5. WEB-ПРОГРАММИРОВАНИЕ В NET(Расширенные возможности) - student2.ru

Рис.10.4

ЛЕКЦИЯ 11. РАЗРАБОТКА ОФИСНЫХ БИЗНЕС-ПРИЛОЖЕНИЙ

предыдущий_раздел следующий_раздел следующая_лекция

предыдущая лекция

Список лекций

Вызов Word и Excel из C#

Для работы с пакетом MS OFFICE нужно подключить соответствующие классы. Начнем рассмотрение с работы с EXCEL. Создадим приложение на основе шаблона Windows Application и добавим ссылку на объект ExcelObjectLibrary. Для этого в окне Solution Explorer выберем п.Add Reference из контекстного меню, затем выберем закладку COM и в списке найдем элемент MicroSoft Excel Object Library. Разместим на форме пять кнопок и текстовое поле.

Запрограммируем первую кнопку таким образом.

private void button1_Click(object sender, System.EventArgs e)

{

Excel._Application obEx;

this.Activate();

obEx=(Excel._Application)System.Runtime.InteropServices.Marshal.GetActiveObject("Excel.Application");

MessageBox.Show(obEx.ActiveWorkbook.Name);

obEx=null;

}

Обеспечим, чтобы при запуске программы предварительно было развернуто приложение EXCEL (иначе возникает исключение). Приведенный код просто выводит имя активной книги Excel.

Вторую кнопку запрограммируем следующим образом:

private void button2_Click(object sender, System.EventArgs e)

{

Excel.Worksheet xlsheet;

Excel.Workbook xlwrkbook;

xlwrkbook = (Excel.Workbook)System.Runtime.InteropServices.Marshal.BindToMoniker(textBox1.Text);

xlsheet=(Excel.Worksheet)xlwrkbook.ActiveSheet;

string sFile=textBox1.Text.Substring(textBox1.Text.LastIndexOf("\\")+1);

xlwrkbook.Application.Windows[sFile].Visible=true;

xlwrkbook.Application.Visible=true;

xlsheet.Cells[1,1]=100;

}

}

}

Снова предполагается, что при запуске приложения открыт Excel. Теперь в текстовом поле следует ввести имя Excel-файла. Это имя в программе извлекается в переменную sFile:

sFile=textBox1.Text.Substring(textBox1.Text.LastIndexOf("\\")+1);

Затем открывается данный документ и в ячейку Cells[1,1] записывается число 100.

Третью кнопку запрограммируем для вызова документа Word.

private void button3_Click(object sender, System.EventArgs e)

{

Word.Application wd;

this.Activate();

MessageBox.Show("Launching Word");

wd=(Word.Application)System.Runtime.InteropServices.Marshal.GetActiveObject("Word.Application");

MessageBox.Show(wd.Name);

wd=null;

}

Третью кнопку программируем аналогично первой. Однако теперь нужно подключить в список ссылок библиотеку Word. Добавим ссылку на объект WordObjectLibrary. Для этого в окне Solution Explorer выберем п.Add Reference из контекстного меню, затем выберем закладку COM и в списке найдем элемент MicroSoft Word Object Library.

Предполагается, что Word запущен перед тем, как нажата кнопка 3. Однако, Word можно запустить и программно, для чего перепрограммируем кнопку 3 следующим образом:

private void button3_Click(object sender, System.EventArgs e)

{

System.Diagnostics.Process.Start(@"C:\Program Files\Microsoft Office\Office\WinWord.Exe");

Word.Application wd;

this.Activate();

MessageBox.Show("Launching Word");

wd=(Word.Application)System.Runtime.InteropServices.Marshal.GetActiveObject("Word.Application");

MessageBox.Show(wd.Name);

wd=null;

}

}

Попутно заметим, что можно выполнить исполняемый файл с помощью команды

System.Diagnostics.Process.Start(путькфайлу);

Четвертая кнопка позволит выбрать из файлового диалога файл с документом Word и открыть его. При этом не требуется, чтобы Word был предварительно запущен. Документ Word, подлежащий открытию, выбирается из окна файлового диалога в строке:

Word.Document wdoc=wd.Documents.Open(ref filename,…

В открытом документе можно производить любые изменения.

private void button4_Click(object sender, System.EventArgs e)

{

if(this.openFileDialog1.ShowDialog()==DialogResult.OK)

{

object filename=openFileDialog1.FileName;

object readOnly=false;

object isVisible=true;

object missing=System.Reflection.Missing.Value;

Word.ApplicationClass wd=

new Word.ApplicationClass();

wd.Visible=true;

Word.Document wdoc=wd.Documents.Open(ref filename,

ref missing,ref missing, ref missing,

ref missing,ref missing,

ref missing, ref missing,

ref missing,

ref readOnly,ref missing,

ref isVisible);

wdoc.Activate();

}

}

ЛЕКЦИЯ 12. ОСНОВЫ WINDOWS PRESENTATION FOUNDATION.

предыдущая лекция

Список лекций

Windows Presentation Foundation (WPF) – новая технологгия для создания приложений на основе графического интерфейса. Код приложения параллельно создается в файле XAML (eXtended Application Markup Languge). Этот язык используется также в SilverLight, WFC. Чтобы быстро войти в курс этой технологии, создадим простое приложение [11]. Создадим новый проект в NET 2008(2010) – Windows – WPF Application – (имя проекта). Система создаст следующую заготовку (рис.12.1)

РAЗДЕЛ 5. WEB-ПРОГРАММИРОВАНИЕ В NET(Расширенные возможности) - student2.ru

Рис.12.1

В нижнем окне мы видим код XAML. Он такой:

<Window x:Class="my1wpf.Window1"

xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"

xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"

Title="Window1" Height="300" Width="300">

<Grid>

</Grid>

</Window>

Этот кодж представляет заготовку. Он напоминает язык xml. Тэги описывают элементы, размещаемые в окне. Первоначально мы разместим в окне панель (DockPanel), а на ней элементы меню. Текст XAML такой

<Window x:Class="my1wpf.Window1"

xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"

xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"

Title="Window1" Height="300" Width="300">

<DockPanel Name="dp1" VerticalAlignment="Stretch"

HorizontalAlignment="Stretch">

<Menu DockPanel.Dock="Top" Height="Auto">

<MenuItem Header="_Cut"/>

<MenuItem Header="_Paste"/>

<MenuItem Header="_Exit" />

</Menu>

</DockPanel>

</Window>

Теперь окно принимает следующий вид:

РAЗДЕЛ 5. WEB-ПРОГРАММИРОВАНИЕ В NET(Расширенные возможности) - student2.ru

Рис.12.2

Напомним, что запуск программы можно реализовать через меню Debug -> Start Debugging.

Далее добавим текстовое поле:

<Window x:Class="my1wpf.Window1"

xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"

xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"

Title="Window1" Height="300" Width="300">

<DockPanel Name="dp1" VerticalAlignment="Stretch"

HorizontalAlignment="Stretch">

<Menu DockPanel.Dock="Top" Height="Auto">

<MenuItem Header="_Cut"/>

<MenuItem Header="_Paste"/>

<MenuItem Header="_Exit" />

</Menu>

<TextBox AcceptsReturn="True" SpellCheck.IsEnabled="True"

HorizontalScrollBarVisibility="Auto"

VerticalScrollBarVisibility="Auto"

Name="txt1"

/>

</DockPanel>

</Window>

Теперь мы уже можем набирать текст в текстовом поле (рис.12.3)

РAЗДЕЛ 5. WEB-ПРОГРАММИРОВАНИЕ В NET(Расширенные возможности) - student2.ru

Рис.12.3

Последнее, что мы сделаем по части отображения визуальных элементов – добавим кнопку:

<Window x:Class="wpf2.Window1"

xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"

xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"

Title="Window1" Height="300" Width="300">

<DockPanel Name="dp1" VerticalAlignment="Stretch"

HorizontalAlignment="Stretch">

<Menu DockPanel.Dock="Top" Height="Auto" Name="menu1" Width="Auto">

<MenuItem Header="_Cut" Command="Cut"/>

<MenuItem Header="_Paste" Command="Paste"/>

</Menu>

<ToolBarTray DockPanel.Dock="Top">

<ToolBar>

<Button Name="btn" Content="Exit" Background="Coral" Click="myClick">

</Button>

</ToolBar>

</ToolBarTray>

<TextBox AcceptsReturn="True"

SpellCheck.IsEnabled="True"

HorizontalScrollBarVisibility="Auto"

VerticalScrollBarVisibility="Auto"

Name="txt1">

</TextBox>

</DockPanel>

</Window>

Окно приложения примет такой вид

РAЗДЕЛ 5. WEB-ПРОГРАММИРОВАНИЕ В NET(Расширенные возможности) - student2.ru

Рис.12.4

Нам следует запрограммировать реакцию на элементы меню и кнопку. Реакция может описываться стандартными действия и нестандартными (действиями, предложенными пользователями). Действия для элементов меню задаются в параметрах Command:

<MenuItem Header="_Paste" Command="Paste"/>

Для кнопки действие задается в параметре Click:

<Button Name="btn" Content="Exit" Background="Coral"

Click="myClick">

Стандартные действия программировать не надо. Чтобы запрограммировать событие от кнопки просто щелкнем на ней дважды в режиме редактирования и введем код на языке C#:

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.Windows;

using System.Windows.Controls;

using System.Windows.Data;

using System.Windows.Documents;

using System.Windows.Input;

using System.Windows.Media;

using System.Windows.Media.Imaging;

using System.Windows.Navigation;

using System.Windows.Shapes;

namespace wpf2

{

/// <summary>

/// Interaction logic for Window1.xaml

/// </summary>

public partial class Window1 : Window

{

public Window1()

{

InitializeComponent();

btn.Click+=new RoutedEventHandler(myClick);

}

private void myClick(object sender, RoutedEventArgs e)

{

Application.Current.Shutdown();

}

}

}

Здесь в качестве обработчика события для кнопки закреплент метод myClick. Аналогичным образом поступаем и для меню. В результате получим следующий окончательный вариант:

private void MenuItem_Click(object sender, RoutedEventArgs e)

{

if (sender.Equals(mit3))

Application.Current.Shutdown();

}

}

}

<Window x:Class="wpf2.Window1"

xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"

xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"

Title="Window1" Height="300" Width="300">

<DockPanel Name="dp1" VerticalAlignment="Stretch"

HorizontalAlignment="Stretch">

<Menu DockPanel.Dock="Top" Height="Auto" Name="menu1" Width="Auto">

<MenuItem Name="mit1" Header="_Cut" Command="Cut"/>

<MenuItem Name="mit2" Header="_Paste" Command="Paste"/>

<MenuItem Name="mit3" Header="_Exit" Click="MenuItem_Click" />

</Menu>

<ToolBarTray DockPanel.Dock="Top">

<ToolBar>

<Button Name="btn" Content="Exit" Background="Coral" Click="myClick">

</Button>

</ToolBar>

</ToolBarTray>

<TextBox AcceptsReturn="True"

SpellCheck.IsEnabled="True"

HorizontalScrollBarVisibility="Auto"

VerticalScrollBarVisibility="Auto"

Name="txt1">

</TextBox>

</DockPanel>

</Window>

Можно несколько изменить свойства элементов, например кнопки, сделав ее представление следующим

РAЗДЕЛ 5. WEB-ПРОГРАММИРОВАНИЕ В NET(Расширенные возможности) - student2.ru

Рис.12.5

Это представление достигается следующим текстом:

<Window x:Class="wpf2.Window1"

xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"

xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"

Title="Window1" Height="300" Width="300">

<DockPanel Name="dp1" VerticalAlignment="Stretch"

HorizontalAlignment="Stretch">

<Menu DockPanel.Dock="Top" Height="Auto" Name="menu1" Width="Auto">

<MenuItem Name="mit1" Header="_Cut" Command="Cut"/>

<MenuItem Name="mit2" Header="_Paste" Command="Paste"/>

<MenuItem Name="mit3" Header="_Exit" Click="MenuItem_Click" />

</Menu>

<ToolBarTray DockPanel.Dock="Top">

<ToolBar>

<Border BorderBrush="Blue" Width="250">

<Button Name="btn" Content="Exit" Background="Coral"

Foreground="Brown"

FontSize="12"

FontWeight="Bold"

Click="myClick">

</Button>

</Border>

</ToolBar>

</ToolBarTray>

<TextBox AcceptsReturn="True"

SpellCheck.IsEnabled="True"

HorizontalScrollBarVisibility="Auto"

VerticalScrollBarVisibility="Auto"

Name="txt1">

</TextBox>

</DockPanel>

</Window>

Более подробные сведения по работе с WPF и XAML можно найти в [11].

В начало

ЛИТЕРАТУРА

ОСНОВНАЯ

  1. Герман, О. Программирование на JAVA и C#./ Герман О.В., Герман Ю.О. - C-кт Петербург, “БХВ”, 2005- 510c.
  2. Лабор, В.Си Шарп. Создание приложений для Windows./ Лабор В.В. – Мн., Харвест, 2003, - 382с.
  3. Гиббонз П. Платформа NET для Java программистов. Спб., Питер, 2001- 326с.
  4. Прайс, Дж. Visual C#.NET .Полное руководство./ Прайс Дж., Гандэрлой - Киев, Век, 2004, -958с.
  5. Нейгел К., С# 4 и платформа NET 4.0 для профессионалов./ Нейгел К.,Ивьен Б., Глин Дж., Уотсон К. – М., Изд.-во Вильямс, 2011, -1440 стр.
  6. Архангельский, Поиск устойчивых ошибок в программах. / Архангельский Б.В., Черняховский В.В. - М., Радио и связь, 1989.
  7. Шапошников, И. ASP.NET. /Шапошников И.В. – БХВ, С-кт. Петербург, 2002, - 358с.
  8. Кровчик Э., Кумар В., Логари Н и др. .NET Сетевое программирование для профессионалов. Изд.-во Лори, - М., 2005, - 417с.

ДОПОЛНИТЕЛЬНАЯ

  1. Пауэрс Л., Снелл М. MicroSoft Visual Studio 2008. C-кт Петербург. БХВ, 2009.- 1100с.
  2. Андерсон Р. Доказательство правильности программ. – М, Мир.1982
  3. Ватсон Б. С# 4.0 на примерах / Ватсон Б. - C-кт Петербург. БХВ, 2011.- 608с.

Общие указания.

Работы выполнять в среде Visual Studion Net 2005 (2008, 2010).

ПРАКТИЧЕСКИЙ РАЗДЕЛ.

Наши рекомендации