Tải bản đầy đủ (.pdf) (10 trang)

Các giải pháp lập trình CSharp- P24 ppsx

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (2.65 MB, 10 trang )

231
Chương 6: Windows Form

Hình 6.14
Phong cách Windows XP và phong cách kinh điển

Nếu bạn áp dụng file manifest cho một ứng dụng đang chạy trên phiên bản
Windows
trước
Windows XP
, nó sẽ bị bỏ qua, và phong cách kinh điển sẽ được sử
dụng. Vì lý do này, bạn nên thử nghiệm ứng dụng của bạn cả khi có và không có
file manifest.
21.
21.
Thay đ i đ đ c c a formổ ộ ụ ủ
Thay đ i đ đ c c a formổ ộ ụ ủ


Bạn muốn thay đổi độ đục của form để nó trong suốt hơn khi xuất hiện


Thiết lập thuộc tính
Opacity
của form với một giá trị nằm giữa
0%

100%
.
Thuộc tính
Opacity


của một form kiểm soát mức độ đục hay trong của một cửa sổ. Ở mức
100%, form xuất hiện với trạng thái mặc định, nghĩa là không có các vùng trong suốt trên
form. Ở mức 0%, form hoàn toàn trong suốt, cũng có nghĩa bạn không thể tương tác với form
được nữa.
Khi thay đổi độ đục của một form bằng mã lệnh, bạn phải sử dụng một số thực nằm giữa 0.0
và 1.0:
private void Form1_MouseEnter(object sender, System.EventArgs e)
{
this.Opacity = 1.0;
}
private void Form1_MouseLeave(object sender, System.EventArgs e)
{
this.Opacity = 0.8;
}
232
Chương 6: Windows Form
Nếu chỉ muốn trong suốt những vùng nào đó trên form, bạn hãy sử dụng thuộc tính
TransparencyKey
. Bạn định nghĩa thuộc tính này là một màu nào đó. Nếu bất kỳ phần nào của
form trùng với màu đó, nó sẽ trở nên trong suốt. Hình 6.15 trình bày một form với độ đục
80%. Chúng ta đặt một điều kiểm
Panel
lên form và thiết lập màu nền của
Panel
là màu mà ta
đã định nghĩa trong thuộc tính
TransparencyKey
của form. Như thế, form sẽ trong suốt trên
vùng thuộc
Panel

.
Hình 6.15
Một form với độ đục 80%
và một Panel có màu nền giống với thuộc tính TransparencyKey của form
Bạn có thể bắt gặp một số ứng dụng dùng hình bitmap làm giao diện người dùng, nhất là các
kiểu media player. Bạn có thể tạo kiểu giao diện thế này bằng cách tạo một hình bitmap với
những vùng nào đó có màu là màu mà bạn muốn trong suốt. Kế tiếp, thiết lập thuộc tính
BackgroundImage
của form là file bitmap mà bạn đã tạo. Cuối cùng, thiết lập thuộc tính
TransparencyKey
của form là màu mà bạn muốn trong suốt trong hình bitmap.
Bitmap Img = ((Bitmap)(Bitmap.FromFile("C:\\Example.bmp")));
// Màu tại Pixel(10,10) được sử dụng làm màu trong suốt.
Img.MakeTransparent(Img.GetPixel(10, 10));
this.BackgroundImage = Img;
this.TransparencyKey = Img.GetPixel(10, 10);
Bạn cũng có thể gỡ bỏ thanh tiêu đề của form bằng cách thiết lập
FormBorderStyle

None
(xem mục 6.14). Để form có thể di chuyển được trong trường hợp này, bạn hãy áp dụng mục
233
Chương 6: Windows Form
6.15. Trên đây là một cách để tạo form có hình dáng bất thường, một cách khác sẽ được trình
bày trong mục 8.3.
7
234
Chương 7:ASP.NET VÀ WEB FORM
235
236

Chương 7: ASP.NET và Web Form
icrosoft ASP.NET là một nền dùng để phát triển các ứng dụng Web, và nó là một
phần của Microsoft .NET Framework. ASP.NET cho phép bạn viết dịch vụ Web
XML (sẽ được thảo luận trong chương 12) và phát triển website (được thảo luận
trong chương này). Các trang ASP.NET sử dụng mô hình điều kiểm dựa-trên-sự-kiện, khiến
cho việc viết mã cho chúng cũng tương tự như viết mã cho các ứng dụng dựa-trên-Windows
thông thường. Tuy nhiên, sự tương tự này có thể là giả tạo. Như hầu hết các nhà phát triển
ASP.NET chứng thực, các ứng dụng Web có cách diễn đạt riêng của chúng. Ví dụ, bạn sẽ cần
thực hiện thêm các bước để duy trì trạng thái, chuyển thông tin giữa các trang, thụ lý những sự
kiện phía client, thực hiện xác thực, và bảo đảm hiệu năng tối ưu khi sử dụng cơ sở dữ liệu.
Chương này sẽ xem xét tất cả các vấn đề này.
M

Chương này sẽ không giới thiệu về
ASP.NET
. Thay vào đó, chương này sẽ giúp
những nhà phát triển
ASP.NET
trung cấp giải quyết những vấn đề thường gặp.
Để tìm hiểu căn bản về
ASP.NET
, hãy vào trang
[

]

hoặc
tham khảo ở các tài liệu khác chuyên về
ASP.NET
.

Các mục trong chương này trình bày các vấn đề sau đây:

Chuyển hướng các yêu cầu của người dùng (mục 7.1).

Duy trì trạng thái giữa các yêu cầu trang (mục 7.2 và 7.3).

Sử dụng JavaScript để cải tiến giao diện với các tính năng phía client (mục 7.4, 7.5, và
7.6).

Cho phép người dùng upload file (mục 7.7).

Xác thực client theo hai cách: Xác thực tích hợp với Windows (mục 7.8) và xác thực
dựa-trên-form (mục 7.9).

Xác nhận tính hợp lệ của đầu vào mà không sử dụng điều kiểm validator của ASP.NET
(mục 7.10).

Tạo động điều kiểm web (mục 7.11), hình ảnh (mục 7.12), và điều kiểm người dùng
(mục 7.13).

Cải thiện hiệu năng với output-caching (mục 7.14) và data-caching (mục 7.15).

Giải quyết thông báo lỗi “Unable to start debugging on the Web server” (mục 7.16).

Thay đổi ngữ cảnh tài khoản Windows mà một ứng dụng ASP.NET chạy trong đó (mục
7.17).
Chương này sử dụng các lớp web cơ bản thuộc không gian tên
System.Web
và các lớp điều
kiểm web thuộc không gian tên

System.Web.UI.WebControls
. Khi sử dụng các lớp trong các
không gian tên này, tên lớp đầy đủ sẽ không được chỉ định.
1.
1.
Chuy n h ng ng i dùng sang trang khácể ướ ườ
Chuy n h ng ng i dùng sang trang khácể ướ ườ


Bạn cần chuyển sự thực thi từ một trang
ASP.NET
sang một trang khác, hoặc
bạn muốn chuyển người dùng đến một site hoàn toàn khác.
237
Chương 7: ASP.NET và Web Form


Sử dụng phương thức
HttpResponse.Redirect
để chuyển người dùng đến một
URL
mới, hoặc sử dụng phương thức
HttpServerUtility.Transfer
(nhanh hơn)
để chuyển người dùng đến một
Web Form

ASP.NET
khác trên cùng server.
Cách dễ nhất để chuyển người dùng từ một trang này đến một trang khác là sử dụng phương

thức
HttpResponse.Redirect
và cấp một URL mới. Bạn có thể truy xuất đối tượng
HttpResponse
hiện tại thông qua đối tượng
HttpContext
hoặc sử dụng thuộc tính
Reponse
của
đối tượng
Page
hoặc
Control
. Phương thức thụ lý sự kiện dưới đây (đáp ứng cho một cú nhắp
chuột vào
Button
) sẽ chuyển người dùng đến một trang ASP.NET mới:
private void cmdRedirect_Click(object sender, System.EventArgs e) {
Response.Redirect("newpage.aspx");
}
Phương thức
Redirect
có thể làm việc với URL tương đối (chỉ đến những tài nguyên trong
cùng thư mục ảo), và với URL đầy đủ. URL có thể chỉ đến trang ASP.NET khác, kiểu tài liệu
khác (như trang HTML hoặc hình ảnh), và web-server khác.
Phương thức
Redirect
gửi chỉ thị chuyển hướng đến trình duyệt. Kế đó, trình duyệt sẽ yêu cầu
trang mới. Kết quả là trình duyệt phải thực hiện hai chuyến đến web-server, và web-server
phải xử lý thêm một yêu cầu nữa. Một tùy chọn hiệu quả hơn là sử dụng phương thức

HttpServerUtility.Transfer
, phương thức này sẽ chuyển sự thực thi đến một trang ASP.NET
khác trên cùng web-server. Ví dụ:
private void cmdRedirect_Click(object sender, System.EventArgs e) {
Server.Transfer("newpage.aspx");
}
Phương thức
Transfer
không cần thêm một chuyến đến client, nhưng nó sẽ không làm việc
nếu bạn cần chuyển sự thực thi đến một server khác hoặc một kiểu tài nguyên khác với Web
Form (bao gồm trang ASP cổ điển).
2.
2.
Duy trì tr ng thái gi a các yêu c u c a trangạ ữ ầ ủ
Duy trì tr ng thái gi a các yêu c u c a trangạ ữ ầ ủ


Bạn cần lưu trữ vài thông tin đặc thù của người dùng giữa các lần postback của
trang.


Sử dụng
view state
(trạng thái nhìn),
query string argument
(đối số chuỗi truy
vấn),
session state
(trạng thái phiên làm việc), hoặc
cookie

, tùy thuộc vào nhu cầu
của bạn.
ASP.NET là một mô hình lập trình phi trạng thái (stateless programming model). Mỗi khi một
postback được phát sinh, mã sẽ nạp vào bộ nhớ, thực thi, và được giải phóng khỏi bộ nhớ.
Nếu muốn giữ lại vết của thông tin sau khi mã đã hoàn tất việc xử lý, bạn phải sử dụng các
kiểu quản lý trạng thái (state management).
238
Chương 7: ASP.NET và Web Form
ASP.NET cung cấp nhiều cách để lưu trữ thông tin, hay trạng thái, giữa các yêu cầu (request).
Kiểu trạng thái mà bạn sử dụng cho biết: thông tin sẽ sống bao lâu, sẽ được lưu trữ ở đâu, và
sẽ được bảo mật như thế nào. Bảng 7.1 liệt kê những tùy chọn trạng thái khác nhau được cấp
bởi ASP.NET. Bảng này không chứa đối tượng
Cache
, đối tượng này cung cấp kho lưu trữ tạm
thời và sẽ được mô tả trong mục 7.5.
Cú pháp cho các phương pháp lưu trữ dữ liệu là như nhau. Dữ liệu được lưu trữ trong một đối
tượng tập hợp và được đánh chỉ mục bằng một tên chuỗi.
Bảng 7.1
Các kiểu quản lý trạng thái
Kiểu
trạng thái
Dữ liệu
được phép
Vị trí lưu trữ Thời gian sống Bảo mật
View state
Tất cả các
kiểu dữ liệu
khả-tuần-
tự-hóa
.NET.

Một trường ẩn
trong trang web
hiện hành.
Bị mất khi người
dùng chuyển sang
một trang khác.
Mặc định là không
an toàn. Tuy nhiên,
bạn có thể sử dụng
các chỉ thị trang để
thực hiện mật hóa
và băm để ngăn dữ
liệu bị phá.
Query
string
Dữ liệu
chuỗi.
Chuỗi URL của
trình duyệt.
Bị mất khi người
dùng nhập một URL
mới hoặc đóng trình
duyệt. Tuy nhiên, nó
có thể được lưu trữ
trong một
bookmark.
Người dùng có thể
nhìn thấy được và
chỉnh sửa dễ dàng.
Session

state
Tất cả các
kiểu dữ liệu
khả-tuần-
tự-hóa
.NET.
Bộ nhớ server
(có thể được cấu
hình cho một
tiến trình hoặc
cơ sở dữ liệu
bên ngoài).
Hết hiệu lực sau một
khoảng thời gian
được định nghĩa
trước (thường là 20
phút, nhưng khoảng
thời gian này có thể
thay đổi được).
An toàn vì dữ liệu
không bao giờ được
chuyển cho client.
Cookie
Dữ liệu
chuỗi.
Máy tính client
(trong bộ nhớ
hoặc một file
text, tùy thuộc
vào các thiết lập

cho thời gian
sống của nó).
Được thiết lập bởi
lập trình viên. Có
thể được sử dụng
trong nhiều trang và
có thể vẫn còn giữa
các lần viếng thăm.
Không an toàn, và
có thể bị người
dùng chỉnh sửa.
239
Chương 7: ASP.NET và Web Form
Applicatio
n state
Tất cả các
kiểu dữ liệu
khả-tuần-
tự-hóa
.NET.
Bộ nhớ server.
Thời gian sống của
ứng dụng (cho đến
khi server được khởi
động lại). Không
giống với các
phương pháp khác,
dữ liệu ứng dụng là
toàn cục đối với tất
cả các người dùng.

An toàn vì dữ liệu
không bao giờ được
chuyển cho client.
Hình 7.1 trình bày một trang web thử nghiệm các kiểu quản lý trạng thái khác nhau. Khi
người dùng nhắp vào nút Store Data, một đối tượng
System.DateTime
sẽ được tạo ra và được
lưu trữ trong view state, session state, và một cookie tùy biến. Khi người dùng nhắp vào nút
Get Data, thông tin này sẽ được lấy ra và hiển thị. Cuối cùng, nút Clear Data sẽ xóa thông tin
này trong tất cả các trạng thái.
Hình 7.1
Thử nghiệm các kiểu quản lý trạng thái
Dưới đây là phần mã cho trang:
using System;
using System.Web;
using System.Web.UI.WebControls;
using System.Web.SessionState;
public class TestState : System.Web.UI.Page {
protected System.Web.UI.WebControls.Button cmdClear;
protected System.Web.UI.WebControls.Button cmdStore;
240
Chương 7: ASP.NET và Web Form
protected System.Web.UI.WebControls.Button cmdGetData;
protected System.Web.UI.WebControls.Label lblData;
// (Bỏ qua phần mã designer.)
private void cmdStore_Click(object sender, System.EventArgs e) {
// Tạo đối tượng thử nghiệm.
DateTime now = DateTime.Now;
// Lưu trữ đối tượng trong view state.
ViewState["TestData"] = now;

// Lưu trữ đối tượng trong session state.
Session["TestData"] = now;
// Lưu trữ đối tượng trong một cookie tùy biến.
// Kiểm tra xem cookie đã tồn tại hay chưa (có tên là 07-02).
if (Request.Cookies["07-02"] == null) {
// Tạo cookie.
HttpCookie cookie = new HttpCookie("07-02");
// Cookie chỉ có thể lưu trữ dữ liệu chuỗi.
// Nó có thể lưu trữ nhiều giá trị,
// mỗi giá trị ứng với một khóa khác nhau.
cookie["TestData"] = now.ToString();

// (Bạn có thể chỉnh sửa các thuộc tính
// của cookie để thay đổi ngày hết hiệu lực.)
// Gắn cookie vào đáp ứng.
// Nó sẽ được cung cấp với tất cả các yêu cầu đến
// site này cho đến khi hết hiệu lực.
Response.Cookies.Add(cookie);

×