c# pdf reader using : Delete page in pdf document software SDK project winforms wpf html UWP telerik_ui_for_winforms_courseware27-part817

namespaces:
3.  Add an enumeration that will be used later when displaying status information:
4. Add a private member that will store a list of DatabaseInfo objects and a RadLabelElement that will host 
our waiting bar control.
5. Add the helper methods below. The helper methods will:
Get an icon representing a given StatusTypes member. 
Display status messages and icons. 
Show/Hide both the progress and waiting bars. 
Toggle the UI Enabled properties to prevent the user from initiating new processes before existing 
work is completed.
[VB] Adding References
Imports System
Imports System.Collections.Generic
Imports System.ComponentModel
Imports System.Data
Imports System.Drawing
Imports System.Windows.Forms
Imports Microsoft.SqlServer.Management.Smo
Imports Telerik.WinControls
Imports Telerik.WinControls.Primitives
Imports Telerik.WinControls.UI 
[C#] Adding References
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Windows.Forms;
using Microsoft.SqlServer.Management.Smo;
using Telerik.WinControls;
using Telerik.WinControls.Primitives;
using Telerik.WinControls.UI;
[VB] The StatusTypes Enumeration
Enum StatusTypes
Info
[Error]
Find
End Enum
[C#] The StatusTypes Enumeration
enum StatusTypes { Info, Error, Find };
[VB] Generic List of DatabaseInfo
Private _dbInfoList As List(Of DatabaseInfo)
Private _waitingBarHostLabel As RadLabelElement 
[C#] Generic List of DatabaseInfo
private List<DatabaseInfo> _dbInfoList;
private RadLabelElement _waitingBarHostLabel;
RadControls for Winforms
263
RadControls for Winforms
Delete page in pdf document - remove PDF pages in C#.net, ASP.NET, MVC, Ajax, WinForms, WPF
Provides Users with Mature Document Manipulating Function for Deleting PDF Pages
delete a page from a pdf file; delete blank page in pdf online
Delete page in pdf document - VB.NET PDF Page Delete Library: remove PDF pages in vb.net, ASP.NET, MVC, Ajax, WinForms, WPF
Visual Basic Sample Codes to Delete PDF Document Page in .NET
delete page pdf; delete pages from pdf document
[VB] Helper Methods
' retrieve an image for a given status
Private Function GetStatusImage(statusType As StatusTypes) As Image
Select Case statusType
Case StatusTypes.[Error]
Return Properties.Resources.[Error]
Case StatusTypes.Info
Return Properties.Resources.Information
Case StatusTypes.Find
Return Properties.Resources.FindServersAnimated
Case Else
Return Properties.Resources.Information
End Select
End Function
' display a text and image status message
Private Sub DisplayStatus(message As String, statusType As StatusTypes)
lblStatus.Text = message
lblStatus.Image = GetStatusImage(statusType)
End Sub
' create a RadLabel\HostedItem\RadWaitingBar and insert into
' the status strip.
Private Function GetHostedWaitingBar(name As StringAs RadLabelElement
' make height and width the same so ellipse will be a circle
Dim size As New Size(btnServers.Size.Height, btnServers.Size.Height)
' use hosted waiting bar control instead of element for access to
' start/stop waiting methods.
Dim waitingBar As New RadWaitingBar()
' waiting bar animation sweeps top to bottom
waitingBar.Orientation = Orientation.Vertical
waitingBar.WaitingBarElement.BackColor = Color.SteelBlue
waitingBar.WaitingBarElement.Shape = New EllipseShape()
Dim waitingBarHostLabel As New RadLabelElement()
' status label to the left will respect DefaultSize and
' leave room for waiting bar
waitingBarHostLabel.DefaultSize = size
waitingBarHostLabel.Name = name
Dim host As New RadHostItem(waitingBar)
waitingBarHostLabel.Children.Insert(0, host)
' set transparent after being inserted to host children
waitingBar.BackColor = Color.Transparent
Return waitingBarHostLabel
End Function
' Loads a list box with generic List of DatabaseInfo;
' Name to the Text and number of objects to the description
Private Sub LoadDatabaseList(listBox As RadListBox, maxObjects As Integer)
listBox.Items.Clear()
For Each info As DatabaseInfo In _dbInfoList
' limit databases to those with number of objects within trackbar limits
If info.ObjectCount <= maxObjects Then
Dim item As New RadListBoxItem(info.DatabaseName, info)
item.DescriptionText = info.ObjectCount.ToString() + " objects"
item.DescriptionFont = New Font(item.DescriptionFont, FontStyle.Italic)
listBox.Items.Add(item)
End If
Next
End Sub
' reset progress bar value and add to status strip
RadControls for Winforms
264
RadControls for Winforms
C# PDF Page Insert Library: insert pages into PDF file in C#.net
page processing functions, such as how to merge PDF document files by C# code, how to rotate PDF document page, how to delete PDF page using C# .NET, how to
pdf delete page; delete page pdf file reader
C# PDF File & Page Process Library SDK for C#.net, ASP.NET, MVC
Page Process. File: Merge, Append PDF Files. File: Split PDF Document. File: Compress PDF. Page: Create Thumbnails. Page: Insert PDF Pages. Page: Delete Existing
delete blank pages in pdf online; delete page from pdf file online
Private Sub ShowProgressBar()
pbStatus.Value1 = 0
ssMain.Items.Add(pbStatus)
End Sub
' remove progress bar from status strip
Private Sub HideProgressBar()
ssMain.Items.Remove(pbStatus)
End Sub
' add waiting bar element to status strip,
' get host item, drill down to waitiing bar and StartWaiting()
Private Sub ShowWaitingBar()
ssMain.Items.Add(_waitingBarHostLabel)
Dim hostItem As RadHostItem = TryCast(_waitingBarHostLabel.Children(0), 
RadHostItem)
(TryCast(hostItem.HostedControl, RadWaitingBar)).StartWaiting()
End Sub
' get host item, drill down to waitiing bar, EndWaiting() and
' remove element from status strip.
Private Sub HideWaitingBar()
Dim hostItem As RadHostItem = TryCast(_waitingBarHostLabel.Children(0), 
RadHostItem)
(TryCast(hostItem.HostedControl, RadWaitingBar)).EndWaiting()
ssMain.Items.Remove(_waitingBarHostLabel)
End Sub
' disable controls during processing
Private Sub SetUIEnabled(enabled As Boolean)
btnServers.Enabled = enabled
lbServers.Enabled = enabled
lbDatabases.Enabled = enabled
' only enable when there are objects to filter
If Not enabled Then
tbMaxObjects.Enabled = False
End If
End Sub
[C#] Helper Methods
// retrieve an image for a given status
private Image GetStatusImage(StatusTypes statusType)
{
switch (statusType)
{
case StatusTypes.Error:
return Properties.Resources.Error;
case StatusTypes.Info:
return Properties.Resources.Information;
case StatusTypes.Find:
return Properties.Resources.FindServersAnimated;
default:
return Properties.Resources.Information;
}
}
// display a text and image status message
private void DisplayStatus(string message, StatusTypes statusType)
{
lblStatus.Text = message;
lblStatus.Image = GetStatusImage(statusType);
}
RadControls for Winforms
265
RadControls for Winforms
VB.NET PDF Page Insert Library: insert pages into PDF file in vb.
Easy to Use VB.NET APIs to Add a New Blank Page to PDF Document in VB.NET Program. DLLs for Adding Page into PDF Document in VB.NET Class.
delete pages from pdf acrobat reader; delete pages pdf
VB.NET PDF File & Page Process Library SDK for vb.net, ASP.NET
document. If you find certain page in your PDF document is unnecessary, you may want to delete this page directly. Moreover, when
delete a page from a pdf file; delete a page from a pdf
// create a RadLabel\HostedItem\RadWaitingBar and insert into
// the status strip.
private RadLabelElement GetHostedWaitingBar(string name)
{
// make height and width the same so ellipse will be a circle
Size size = new Size(btnServers.Size.Height, btnServers.Size.Height);
// use hosted waiting bar control instead of element for access to
// start/stop waiting methods.
RadWaitingBar waitingBar = new RadWaitingBar();
// waiting bar animation sweeps top to bottom
waitingBar.Orientation = Orientation.Vertical;
waitingBar.WaitingBarElement.BackColor = Color.SteelBlue;
waitingBar.WaitingBarElement.Shape = new EllipseShape();
RadLabelElement waitingBarHostLabel = new RadLabelElement();
// status label to the left will respect DefaultSize and
// leave room for waiting bar
waitingBarHostLabel.DefaultSize = size;
waitingBarHostLabel.Name = name;
RadHostItem host = new RadHostItem(waitingBar);
waitingBarHostLabel.Children.Insert(0, host);
// set transparent after being inserted to host children
waitingBar.BackColor = Color.Transparent;
return waitingBarHostLabel;
}
// Loads a list box with generic List of DatabaseInfo;
// Name to the Text and number of objects to the description
private void LoadDatabaseList(RadListBox listBox, int maxObjects)
{
listBox.Items.Clear();
foreach (DatabaseInfo info in _dbInfoList)
{
// limit databases to those with number of objects within trackbar limits
if (info.ObjectCount <= maxObjects)
{
RadListBoxItem item = new RadListBoxItem(info.DatabaseName, info);
item.DescriptionText = info.ObjectCount.ToString() + " objects";
item.DescriptionFont = new Font(item.DescriptionFont, FontStyle.Italic);
listBox.Items.Add(item);
}
}
}
// reset progress bar value and add to status strip
private void ShowProgressBar()
{
pbStatus.Value1 = 0;
ssMain.Items.Add(pbStatus);
}
// remove progress bar from status strip
private void HideProgressBar()
{
ssMain.Items.Remove(pbStatus);
}
// add waiting bar element to status strip,
// get host item, drill down to waitiing bar and StartWaiting()
private void ShowWaitingBar()
{
ssMain.Items.Add(_waitingBarHostLabel);
RadControls for Winforms
266
RadControls for Winforms
VB.NET PDF Page Extract Library: copy, paste, cut PDF pages in vb.
Dim filepath As String = "" Dim outPutFilePath As String = "" Dim doc As PDFDocument = New PDFDocument(filepath) ' Copy the first page of PDF document.
delete page from pdf online; delete blank pages in pdf
C# PDF Page Extract Library: copy, paste, cut PDF pages in C#.net
String filepath = @""; String outPutFilePath = @""; PDFDocument doc = new PDFDocument(filepath); // Copy the first page of PDF document.
delete pdf page acrobat; delete blank page from pdf
6. Replace the code in the Form's Load event handler with the code below. The first line of code here will 
simply give the "Max Objects" panel rounded corners similar to the list boxes. Then create a 
RadLabelElement that hosts the waiting bar. Finally, hide the progress bar until needed.
RadHostItem hostItem =
_waitingBarHostLabel.Children[0] as RadHostItem;
(hostItem.HostedControl as RadWaitingBar).StartWaiting();
}
// get host item, drill down to waitiing bar, EndWaiting() and
// remove element from status strip.   
private void HideWaitingBar()
{
RadHostItem hostItem = _waitingBarHostLabel.Children[0] as RadHostItem;
(hostItem.HostedControl as RadWaitingBar).EndWaiting();
ssMain.Items.Remove(_waitingBarHostLabel);
}
// disable controls during processing
private void SetUIEnabled(bool enabled)
{
btnServers.Enabled = enabled;
lbServers.Enabled = enabled;
lbDatabases.Enabled = enabled;
// only enable when there are objects to filter
if (!enabled)
tbMaxObjects.Enabled = false;
}
The relationship of objects created in GetHostedWaitingBar() looks something like the image 
below. Why so many levels? In our database listing example we need to call the StartWaiting() 
method of the RadWaitingBar; this method does not exist in a RadWaitingBarElement, so we need 
to contain a RadWaitingBar control using RadHostItem.
Why use RadLabelElement as the outermost element inside the status strip? We could have used 
a RadPanelElement for example, but RadLabelElement has the fewest visual artifacts that might 
be in the way, e.g. borders, that would need to be removed. Use RadLabelElement with the Text 
set to "" to see just the hosted RadWaitingBar control.  
[VB] Handling the Form Load Event
Private Sub RadForm1_Load(sender As Object, e As System.EventArgs)
tbMaxObjects.Enabled = False
' panel should have same shape as the two list boxes
(TryCast(pnlMaxObjects.RootElement.Children(0).Children(1), BorderPrimitive)).Shape 
RadControls for Winforms
267
RadControls for Winforms
C# PDF metadata Library: add, remove, update PDF metadata in C#.
C#.NET PDF SDK - Edit PDF Document Metadata in C#.NET. Allow C# Developers to Read, Add, Edit, Update and Delete PDF Metadata in .NET Project.
delete a page from a pdf in preview; copy page from pdf
VB.NET PDF delete text library: delete, remove text from PDF file
187.0F) Dim aChar As PDFTextCharacter = textMgr.SelectChar(page, cursor) ' delete a selected As String = Program.RootPath + "\\" output.pdf" doc.Save
copy pages from pdf to word; delete pages from pdf in reader
List Servers
1. To handle tasks related to the BackgroundWorker for the list of servers, add the code below.
RunServerWorker() creates the BackgroundWorker object instance, hooks up the events and calls 
RunWorkerAsync() to begin processing. 
The DoWork() event handler calls the SmoApplication static EnumAvailableSqlServers() method. The 
task of retrieving any available MS SQL servers takes an unknown amount of time so the waiting bar is 
the most appropriate control to display feedback. 
The RunWorkerCompleted() event handler gets the result containing a DataTable with the list of 
databases and displays a completion method, or displays an error message if an exception occurs. 
Exceptions thrown in DoWork() are passed to RunWorkerCompleted in the argument Error property.
New RoundRectShape()
_waitingBarHostLabel = GetHostedWaitingBar("WaitingBarHostLabel")
HideProgressBar()
End Sub
[C#] Handling the Form Load Event
private void RadForm1_Load(object sender, System.EventArgs e)
{
tbMaxObjects.Enabled = false;
// panel should have same shape as the two list boxes
(pnlMaxObjects.RootElement.Children[0].Children[1] as BorderPrimitive).Shape = new
RoundRectShape();
_waitingBarHostLabel = GetHostedWaitingBar("WaitingBarHostLabel");
HideProgressBar();
}
[VB] Handle the Server BackgroundWorker
' create and configure the BackgroundWorker object
Private Sub RunServerWorker()
Dim serverWorker As New BackgroundWorker()
serverWorker.DoWork += New DoWorkEventHandler(serverWorker_DoWork)
serverWorker.RunWorkerCompleted += New RunWorkerCompletedEventHandler
(serverWorker_RunWorkerCompleted)
serverWorker.RunWorkerAsync()
End Sub
' retrieve MS SQL servers, pass back DataTable result
Sub serverWorker_DoWork(sender As Object, e As DoWorkEventArgs)
e.Result = SmoApplication.EnumAvailableSqlServers()
End Sub
' update the UI using the Result property of the args, or
' the Error property if the operation fails.
Sub serverWorker_RunWorkerCompleted(sender As Object, e As
RunWorkerCompletedEventArgs)
If e.[Error] <> Nothing Then
DisplayStatus(e.[Error].Message, StatusTypes.[Error])
Else
' populate list box from data table of servers passed in as Result
Dim dt As DataTable = TryCast(e.Result, DataTable)
For Each row As DataRow In dt.Rows
lbServers.Items.Add(New RadListBoxItem(row("Name").ToString()))
Next
DisplayStatus("Found " + dt.Rows.Count.ToString() + " servers", StatusTypes.Info)
End If
RadControls for Winforms
268
RadControls for Winforms
2. Replace the existing Click event handling code for "btnServers" with the code below:
HideWaitingBar()
SetUIEnabled(True)
End Sub
[C#] Handle the Server BackgroundWorker
// create and configure the BackgroundWorker object
private void RunServerWorker()
{
BackgroundWorker serverWorker = new BackgroundWorker();
serverWorker.DoWork += new DoWorkEventHandler(serverWorker_DoWork);
serverWorker.RunWorkerCompleted += new RunWorkerCompletedEventHandler
(serverWorker_RunWorkerCompleted);
serverWorker.RunWorkerAsync();
}
// retrieve MS SQL servers, pass back DataTable result
void serverWorker_DoWork(object sender, DoWorkEventArgs e)
{
e.Result = SmoApplication.EnumAvailableSqlServers();
}
// update the UI using the Result property of the args, or
// the Error property if the operation fails.
void serverWorker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
if (e.Error != null)
{
DisplayStatus(e.Error.Message, StatusTypes.Error);
}
else
{
// populate list box from data table of servers passed in as Result
DataTable dt = e.Result as DataTable;
foreach (DataRow row in dt.Rows)
{
lbServers.Items.Add(new RadListBoxItem(row["Name"].ToString()));
}
DisplayStatus("Found " + dt.Rows.Count.ToString() + " servers",
StatusTypes.Info);
}
HideWaitingBar();
SetUIEnabled(true);
}
[VB] Handling the Click Event
Private Sub btnServers_Click(sender As Object, e As System.EventArgs)
SetUIEnabled(False)
lbServers.Items.Clear()
lbDatabases.Items.Clear()
lblDatabases.Text = "Databases"
ShowWaitingBar()
DisplayStatus("Searching for MS SQL Servers", StatusTypes.Find)
RunServerWorker()
End Sub
[C#] Handling the Click Event
private void btnServers_Click(object sender, System.EventArgs e)
RadControls for Winforms
269
RadControls for Winforms
3. Press Ctrl-F5 to run the project. Pressing the "Find Servers" button displays the animated gif, status 
message and waiting bar (shown at the far right of the status bar). When the process completes, the 
servers are listed and the status bar displays a completion message and information icon.
 List Databases
1. To handle tasks related to the BackgroundWorker that lists databases for a server, add the code below.
RunDBWorker() creates the BackgroundWorker object instance, hooks up events and calls 
RunWorkerAsync() to begin processing. Notice that the WorkerReportsProgress property is set to true 
and the ProgressChanged event is assigned a handler. The server name is passed to the 
RunWorkerAsync() method. 
{
SetUIEnabled(false);
lbServers.Items.Clear();
lbDatabases.Items.Clear();
lblDatabases.Text = "Databases";
ShowWaitingBar();
DisplayStatus("Searching for MS SQL Servers", StatusTypes.Find);
RunServerWorker();
}
Try testing the exception handling portion of code by deliberately throwing an Application exception 
during the DoWork event handler. The RunWorkerCompleted event will fire and e.Error will contain 
the Exception object.
 
If you are debugging, Visual Studio will break at the line that causes the exception. Press Ctrl-F5 to 
continue to the RunWorkerCompleted event handler. If you're not debugging you should see the 
exception message displayed in the status strip immediately.
[VB] Triggering an Exception
Sub serverWorker_DoWork(sender As Object, e As DoWorkEventArgs)
Throw New ApplicationException("Something bad happened")
e.Result = SmoApplication.EnumAvailableSqlServers()
End Sub
[C#] Triggering an Exception
void serverWorker_DoWork(object sender, DoWorkEventArgs e)
{
throw new ApplicationException("Something bad happened");
e.Result = SmoApplication.EnumAvailableSqlServers();
}
RadControls for Winforms
270
RadControls for Winforms
The DoWork() event handler retrieves and processes the list of databases on the server. During 
processing the event handler tracks the minimum and maximum number of objects for all databases. 
As each database is processed, a DatabaseInfo object is created, saved in a list and sent through to the 
ReportProgress() method. When all processing is complete, a DBWorkerResult object is created, 
populated and sent back in the arguments Result property. 
The RunWorkerCompleted() event handler gets the result containing the DBWorkerResult and the 
information is used to update the UI.
[VB] Handle the Server BackgroundWorker
' create and configure BackgroundWorker. Populate and pass server name as argument.
' enable progress reporting
Private Sub RunDbWorker(serverName As String, maxObjects As Integer)
Dim dbWorker As New BackgroundWorker()
dbWorker.WorkerReportsProgress = True
dbWorker.DoWork += New DoWorkEventHandler(dbWorker_DoWork)
dbWorker.ProgressChanged += New ProgressChangedEventHandler
(dbWorker_ProgressChanged)
dbWorker.RunWorkerCompleted += New RunWorkerCompletedEventHandler
(dbWorker_RunWorkerCompleted)
dbWorker.RunWorkerAsync(serverName)
End Sub
' retrieve the list of databases for the server:
' -get the number of objects for each database,
' -keep track of the min and max number of objects.
' -calculate progress,
' -create and populate a DatabaseInfo object and pass to
' ProgressChanged event handler.
' Create and populate a DBWorkerResult object and assign to the arguments
' Result property.
Sub dbWorker_DoWork(sender As Object, e As DoWorkEventArgs)
Dim server As New Server(serverName)
Dim count As Integer = 0
Dim maxObjectCount As Integer = 0
Dim minObjectCount As Integer = 0
For Each database As Database In server.Databases
System.Math.Max(System.Threading.Interlocked.Increment(count),count - 1)
' ignore empty databases
If database.IsAccessible Then
' get all objects in the database
Dim dtObjects As DataTable = database.EnumObjects()
' calculate progress
Dim progress As Integer = DirectCast(((DirectCast(count, Double) / DirectCast
(server.Databases.Count, Double)) * 100), Integer)
' assign the first non-zero value
If (minObjectCount = 0) AndAlso (dtObjects.Rows.Count > 0) Then
minObjectCount = dtObjects.Rows.Count
End If
' get min and max number of objects for all databases in server
maxObjectCount = Math.Max(maxObjectCount, dtObjects.Rows.Count)
minObjectCount = Math.Min(maxObjectCount, dtObjects.Rows.Count)
' Call ReportProgress to trigger ProgressChanged event.
' DatabaseInfo passed as the UserState property
Dim databaseInfo As New DatabaseInfo(server.Name, database.Name, 
dtObjects.Rows.Count)
(TryCast(sender, BackgroundWorker)).ReportProgress(progress, databaseInfo)
End If
RadControls for Winforms
271
RadControls for Winforms
Next
e.Result = New DBWorkerResult(server.Name, maxObjectCount, minObjectCount)
End Sub
' respond to ReportProgress() method calls, set progress bar value,
' extract the DatabaseInfo object from the argument's UserState property:
' add to the generic list of DatabaseInfo objects for use on completion,
' and display a status message with the current database name.
Sub dbWorker_ProgressChanged(sender As Object, e As ProgressChangedEventArgs)
pbStatus.Value1 = e.ProgressPercentage
Dim info As DatabaseInfo = TryCast(e.UserState, DatabaseInfo)
_dbInfoList.Add(info)
DisplayStatus(info.DatabaseName, StatusTypes.Info)
End Sub
' update the UI using the Result property of the args, or
' the Error property if the operation fails.
Sub dbWorker_RunWorkerCompleted(sender As Object, e As RunWorkerCompletedEventArgs)
If e.[Error] <> Nothing Then
' reset the "Databases" label to default value
lblDatabases.Text = "Databases"
' display the exception
DisplayStatus(e.[Error].Message, StatusTypes.[Error])
Else
Dim workerResult As DBWorkerResult = TryCast(e.Result, DBWorkerResult)
tbMaxObjects.Maximum = workerResult.MaxItems
' if there are no items, then minimum is zero, otherwise,
' set to the fewest number of items (will always display at least one)
tbMaxObjects.Minimum = If(workerResult.MinItems = 0, 0, workerResult.MinItems 
Dim range As Integer = workerResult.MaxItems - workerResult.MinItems
tbMaxObjects.TickFrequency = range / 10
tbMaxObjects.Value = tbMaxObjects.Maximum
' only enable when there are items
tbMaxObjects.Enabled = workerResult.MaxItems > 0
lblCount.Text = tbMaxObjects.Value.ToString()
LoadDatabaseList(lbDatabases, tbMaxObjects.Value)
lblDatabases.Text = "Databases for " + workerResult.ServerName
Dim message As String = "Found " + lbDatabases.Items.Count + " databases for "
workerResult.ServerName
DisplayStatus(message, StatusTypes.Info)
End If
HideProgressBar()
SetUIEnabled(True)
End Sub
[C#] Handle the Server BackgroundWorker
// create and configure BackgroundWorker. Populate and pass server name as argument.
// enable progress reporting
private void RunDbWorker(string serverName, int maxObjects)
{
BackgroundWorker dbWorker = new BackgroundWorker();
dbWorker.WorkerReportsProgress = true;
dbWorker.DoWork += new DoWorkEventHandler(dbWorker_DoWork);
dbWorker.ProgressChanged += new ProgressChangedEventHandler
(dbWorker_ProgressChanged);
dbWorker.RunWorkerCompleted += new RunWorkerCompletedEventHandler
(dbWorker_RunWorkerCompleted);
dbWorker.RunWorkerAsync(serverName);
}
RadControls for Winforms
272
RadControls for Winforms
Documents you may be interested
Documents you may be interested