Рaздел 5. Web-программирование в net(расширенные возможности) — КиберПедия 

Механическое удерживание земляных масс: Механическое удерживание земляных масс на склоне обеспечивают контрфорсными сооружениями различных конструкций...

Общие условия выбора системы дренажа: Система дренажа выбирается в зависимости от характера защищаемого...

Рaздел 5. Web-программирование в net(расширенные возможности)

2017-06-02 222
Рaздел 5. Web-программирование в net(расширенные возможности) 0.00 из 5.00 0 оценок
Заказать работу

 

 

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

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

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

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

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

 

Рис.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>

Этот код набираем в окне Source (Рис.8.2)

Рис.8.2

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

 

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

Рис.8.3

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

 

Рис.8.4

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

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

 

с текстом

<%@ 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):

Рис.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>

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

 

Рис.8.6

 

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

 

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

<%@ 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)

 

 

Рис. 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)

 

 

 

Рис.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.

 

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

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

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

 

 

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

 

<%@ 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>

 

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

 

 

 

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

 

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

 

 

Рис.10.1

 

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

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

 

Рис.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).

 

 

Рис.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);

}

}

 

 

 

Рис.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)

 

 

Рис.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>

 

 

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

 

 

Рис.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)

 

 

Рис.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>

 

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

 

 

Рис.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>

 

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

 

Рис.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).

 

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

 


Поделиться с друзьями:

Опора деревянной одностоечной и способы укрепление угловых опор: Опоры ВЛ - конструкции, предназначен­ные для поддерживания проводов на необходимой высоте над землей, водой...

Особенности сооружения опор в сложных условиях: Сооружение ВЛ в районах с суровыми климатическими и тяжелыми геологическими условиями...

Биохимия спиртового брожения: Основу технологии получения пива составляет спиртовое брожение, - при котором сахар превращается...

Общие условия выбора системы дренажа: Система дренажа выбирается в зависимости от характера защищаемого...



© cyberpedia.su 2017-2024 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав. Мы поможем в написании вашей работы!

0.959 с.