C++ Windows Forms L06 - Utlitity and Strings
-
Upload
mohammad-shaker -
Category
Technology
-
view
337 -
download
6
description
Transcript of C++ Windows Forms L06 - Utlitity and Strings
Mohammad Shakermohammadshakergtr.wordpress.com
C++.NET Windows Forms Course@ZGTRShaker
C++.NET Windows Forms Course
L06-Utility
How to work with OOP in .NET
How to work with OOP in .NET
• Structure of Form class
• Adding variables – Public– Private
• Adding member functions– Procedural
• Adding classes by “ref”
• Passing parameters – % , ^
.NET
.NET
Debugging
Debugging – Break Point
Debugging
Debugging
Debugging
Debugging
references \ declarations \ definitions
Searching in msdn
DateTime class
DateTime
DateTime
private: System::Void button1_Click(System::Object^ sender,
System::EventArgs^ e)
{
DateTime D;
D.Now;
textBox1->Text= D.Day.ToString();
};
1
private: System::Void button1_Click(System::Object^ sender,
System::EventArgs^ e)
{
DateTime D;
textBox1->Text= D.Day.ToString();
};
1
DateTime
private: System::Void button1_Click(System::Object^ sender,
System::EventArgs^ e)
{
DateTime D;
D.Now;
textBox1->Text= D.Now.Day.ToString();
};
9
DateTime Constructor
DateTime Methods
DateTime
DateTime
DateTime
DateTime
DateTime
• Considering today is 22/10/2010, the output will be
private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e)
{
// Calculate what day of the week is 36 days from this instant
DateTime ^today= DateTime::Now;
TimeSpan duration(36, 0, 0, 0);
DateTime ^answer= today->Add(duration);
textBox1->Text= answer->ToString();
}
11/27/2010 1:49:12 AM
DateTime
private: System::Void button1_Click(System::Object^ sender,
System::EventArgs^ e)
{
DateTime ^Day= gcnew DateTime(2010, 10, 6);
textBox1->Text= Day->ToString();
}
10/6/2010 12:00:00 AM
DateTime date1= gcnew DateTime::Now;
DateTime date2= gcnew DateTime::UtcNow;
DateTime date3= gcnew DateTime::Today;
Utc: Coordinated Universal Time
DateTime
private: System::Void button1_Click(System::Object^ sender,
System::EventArgs^ e)
{
DateTime ^Day= gcnew DateTime(2010, 10, 6);
textBox1->Text= Day->ToLongTimeString();
}
12:00:00 AM
private: System::Void button1_Click(System::Object^ sender,
System::EventArgs^ e)
{
DateTime ^Day= gcnew DateTime(2010, 10, 6);
textBox1->Text= Day->ToLongDateString();
}
Wednesday, October 06, 2010
DateTimeprivate: System::Void button1_Click(System::Object^ sender,
System::EventArgs^ e)
{
DateTime ^Day= gcnew DateTime(2010, 10, 6);
textBox1->Text= Day->ToShortDateString();
}
10/6/2010
private: System::Void button1_Click(System::Object^ sender,
System::EventArgs^ e)
{
DateTime ^Day= gcnew DateTime(2010, 10, 6);
textBox1->Text= Day->ToShortTimeString();
}
12:00 AM
DateTimeprivate: System::Void button1_Click(System::Object^ sender,
System::EventArgs^ e)
{
DateTime ^Day= gcnew DateTime(2010, 10, 6);
textBox1->Text= Day >ToString();
}
10/6/2010 12:00:00 AM
private: System::Void button1_Click(System::Object^ sender,
System::EventArgs^ e)
{
DateTime ^Day= gcnew DateTime(2010, 10, 6);
textBox1->Text= Day->ToLocalTime().ToString();
}
10/6/2010 3:00:00 AM
int window= 10;int freq= 60 * 60 * 2; // 2 hours;
DateTime d1= DateTime.Now;
DateTime d2= d1->AddSeconds(2 * window);DateTime d3= d1->AddSeconds(-2 * window);DateTime d4= d1->AddSeconds(window / 2);DateTime d5= d1->AddSeconds(-window / 2);
DateTime d6= (d1.AddHours(2))->AddSeconds(2 * window);DateTime d7= (d1.AddHours(2))->AddSeconds(-2 * window);DateTime d8= (d1.AddHours(2))->AddSeconds(window / 2);DateTime d9= (d1.AddHours(2))->AddSeconds(-window / 2);
Console.WriteLine("d1 ({0}) ~= d1 ({1}): {2}“, d1, d1, RoughlyEquals(d1, d1, window, freq));Console.WriteLine("d1 ({0}) ~= d2 ({1}): {2}", d1, d2, RoughlyEquals(d1, d2, window, freq));Console.WriteLine("d1 ({0}) ~= d3 ({1}): {2}", d1, d3, RoughlyEquals(d1, d3, window, freq));Console.WriteLine("d1 ({0}) ~= d4 ({1}): {2}", d1, d4, RoughlyEquals(d1, d4, window, freq));Console.WriteLine("d1 ({0}) ~= d5 ({1}): {2}", d1, d5, RoughlyEquals(d1, d5, window, freq));
Console.WriteLine("d1 ({0}) ~= d6 ({1}): {2}", d1, d6, RoughlyEquals(d1, d6, window, freq));Console.WriteLine("d1 ({0}) ~= d7 ({1}): {2}", d1, d7, RoughlyEquals(d1, d7, window, freq));Console.WriteLine("d1 ({0}) ~= d8 ({1}): {2}", d1, d8, RoughlyEquals(d1, d8, window, freq));Console.WriteLine("d1 ({0}) ~= d9 ({1}): {2}", d1, d9, RoughlyEquals(d1, d9, window, freq));
DateTime
Properties
Properties
• A compromise between a function and a variable! • See, the following, how awesome!
private:
int MyInt;
public:
// property block
property int intProperty
{
int get()
{
return MyInt;
}
void set(int value)
{
MyInt= value;
}
}
Properties
The property keyword introduces the declaration of a property and can appear in a class, interface, or value type. A property can have a getter function (read only), a setter function (write only), or both (read-write).
public:
int MyInt;
// property block
property int intProperty
{
int get()
{
return MyInt;
}
void set(int value)
{
MyInt= value;
}
}
Properties
• So, how to use it? Like the following …property int intProperty
{
int get()
{
return MyInt;
}
void set(int value)
{
MyInt= value;
}
}
private: System::Void button1_Click(System::Object^ sender,
System::EventArgs^ e)
{
textBox1->Text= intProperty.ToString();
}
Properties
Properties
• So, how to use it? Like the following …property int intProperty
{
int get()
{
return MyInt;
}
void set(int value)
{
MyInt= value;
}
}
private: System::Void button1_Click(System::Object^ sender,
System::EventArgs^ e)
{
intProperty= 5;
textBox1->Text= intProperty.ToString();
}
Properties
Properties
int MyInt;
// property block
property int intProperty
{
int get()
{
return MyInt;
}
void set(int value)
{
MyInt= value;
}
}
private: System::Void button1_Click(System::Object^ sender,
System::EventArgs^ e)
{
intProperty= 5;
textBox1->Text= intProperty.ToString();
intProperty= 14;
textBox1->Text += " " + intProperty.ToString();
}
Properties
Propertiesint MyInt;
// property block
property int intProperty
{
int get()
{
MessageBox::Show("You are lucky to know the property
before others:P:D");
return MyInt;
}
void set(int value)
{
MyInt= value;
}
}
#pragma endregion
private: System::Void button1_Click(System::Object^ sender,
System::EventArgs^ e)
{
intProperty= 5;
textBox1->Text= intProperty.ToString();
}
Properties
Propertiesint MyInt;
// property block
property int intProperty
{
int get()
{
return MyInt;
MessageBox::Show("You are lucky to know the property
before others:P:D");
}
void set(int value)
{
MyInt= value;
}
}
#pragma endregion
private: System::Void button1_Click(System::Object^ sender,
System::EventArgs^ e)
{
intProperty= 5;
textBox1->Text= intProperty.ToString();
}
Note where it is!
Properties
No message box
string\int Conversion
string\int Conversion
• NewLine:– Environment::NewLine;
• Converting from string to int:– Int32::Parse(textBox1->Text);
– Int32::TryParse(textBox1->Text);
string\int Conversion
• Converting from int to string:– Exp #1:
• int x;• textBox1->Text= x.ToString();
– Exp #2:• int x̂; • textBox1->Text= x->ToString();
– Exp #3:• int x̂;• String ^S= x->ToString();
string\int Conversionprivate: System::Void button1_Click_1(System::Object^ sender,
System::EventArgs^ e)
{
int i= 3;
i= int::Parse(textBox1->Text);
}
What happens if we have “435345” in textBox1?
What happens if we have “wewe” in textBox1?
What happens if we have “213s” in textBox1?
What happens if we have “” in textBox1?
private: System::Void button1_Click_1(System::Object^ sender,
System::EventArgs^ e)
{
int i= 3;
i= int::TryParse(textBox1->Text, i ;
}
What happens if we have “435345” in textBox1?
What happens if we have “wewe” in textBox1?
What happens if we have “213s” in textBox1?
What happens if we have “” in textBox1?
string\int Conversion
Files! The Concept
Working with Files
• using!
using namespace System::IO;
void FileManipulate::PrintTextFile (){
String ^FilePath = "D:\\HashFile.Txt" ;
FileStream ^MyFile = gcnew FileStream(FilePath, FileMode::Open);
StreamReader ^SR = gcnew StreamReader(MyFile);String ^str="" ;
// Extracting words while(SR->Peek() > -1){
str = SR->ReadLine();MyForm->textBox1->Text += str + Environment::NewLine ;
}
MyFile->Close();}
using namespace System::IO;
void FileManipulate::PrintTextFile (){
String ^FilePath = "D:\\HashFile.Txt" ;
FileStream ^MyFile = gcnew FileStream ;
StreamReader ^SR = gcnew StreamReader(MyFile);String ^str="" ;
// Extracting words while(SR->Peek() > -1){
str = SR->ReadLine();MyForm->textBox1->Text += str + Environment::NewLine ;
}
MyFile->Close();}
Compiler errorFileStream ^MyFile = gcnew FileStream(FilePath, FileMode::Open);
using namespace System::IO;
Working with Filesprivate: System::Void Form1_Load(System::Object^ sender,
System::EventArgs^ e)
{
SaveFileDialog ^Dialog = gcnew SaveFileDialog();
FileStream ^MyFC ;
String ^FilePath = "" ;
if (Dialog->ShowDialog() ==
System::Windows::Forms::DialogResult::OK)
{
FilePath = Dialog->FileName ;
}
Working with FilesMyFC = File::Create(FilePath) ;
MyFC->Close();
MyFC = File::Open(FilePath ,FileMode::Append );
StreamWriter ^SW = gcnew StreamWriter(MyFC);
SW->WriteLine("I AM ZGTR");
SW->WriteLine("I AM ALWAYS ZGTR");
SW->Close();
MyFC->Close();
MyFC = File::Open(FilePath ,FileMode::Open );
StreamReader ^SR = gcnew StreamReader(MyFC);
String ^str="" ;
// Extracting words
while(SR->Peek() > -1)
{
str = SR->ReadLine();
this->textBox1->Text += str + Environment::NewLine ;
}
MyFC->Close();
}
Working with FilesMyFC = File::Create(FilePath) ;
MyFC->Close();
MyFC = File::Open(FilePath ,FileMode::Append );
StreamWriter ^SW = gcnew StreamWriter(MyFC);
while (textBox1->Text!= “000”)
{ SW-> WriteLine(textBox2->Text) ;}
SW->Close();
MyFC->Close();
MyFC = File::Open(FilePath ,FileMode::Open );
StreamReader ^SR = gcnew StreamReader(MyFC);
String ^str="" ;
// Extracting words
while(SR->Peek() > -1)
{
str = SR->ReadLine();
this->textBox1->Text += str + Environment::NewLine ;
}
MyFC->Close();
}
Working with Files
Working with FilesLive test
Use the console to track\debug values!Do not use messagebox for tracking!
Change between Console and Windows Form• In the project properties for all configurations (Project |
Properties, choose Configuration 'All Configurations', locate Config Properties -> Linker -> System), change the SubSystemfrom Console to Windows.
Change between Console and Windows Form
Change between Console and Windows Form
Change between Console and Windows Form
Project output type example
• Let’s have the following design
Project output type example
• And the following code-behind
Project output type example
• After setting the project output to “console”, Run
Project output type example
• Now, press the button multiple times and there you go!
Creating You Own Windows Forms Control (C++)
http://msdn.microsoft.com/en-us/library/vstudio/ms235628(v=vs.100).aspx
Peak on Exception Handlingtry, catch, throw and finally
private: System::Void panel1_MouseClick(System::Object^ sender,
System::Windows::Forms::MouseEventArgs^ e)
{
try
{
if (textBox1->text == “Hi”)
{
MessageBox::Show(“It’s time for Exceptions! ");
}
}
catch (System::FormatException ^e)
{
MessageBox::Show("You Should Enter a String in textBox first ");
}
}
Peak on Exception Handling
• Test it live!
Mohammad Shakermohammadshakergtr.wordpress.com
C++.NET Windows Forms Course@ZGTRShaker
C++.NET Windows Forms Course
Strings
Welcome!
Strings in Action
Strings in Action-> and ::
Strings in Action
• Let’s have the following form …
Strings in Action
• What happens?
private: System::Void button1_Click(System::Object^ sender,
System::EventArgs^ e)
{
int i = 3;
i++;
String ^Str = textBox1->Text;
String ^TempStr =String::Format("{0}{1}{2}" , Str , "What?" ,
i.ToString());
textBox2->Text += TempStr;
}
Strings in Action
Strings in Action
private: System::Void button1_Click(System::Object^
sender, System::EventArgs^ e)
{
int i = 3;
i++;
String ^Str = textBox1->Text;
String ^TempStr = String::Format("{0}{1} Go! {2}" , Str ,
" What? " , i.ToString());
textBox2->Text += TempStr;
}
Strings in Action
Strings in Action
• Is it okay?
private: System::Void button1_Click(System::Object^
sender, System::EventArgs^ e)
{
int i = 3;
i++;
String ^Str = textBox1->Text;
String ^TempStr = String::Format("{0}{1} Go! {2}" , Str ,
" What? " , i);
textBox2->Text += TempStr;
}
Strings in Action
String Operations by Category
Strings in Action
• Comparing Strings (int):– Compare :
• returns an integer that indicates the relationship of one string to a second string in the sort order.
Strings in Action
Value Condition
Less than zero strA is less than strB.
Zero strA equals strB.
Greater than zero strA is greater than strB.
Strings in Actionprivate: System::Void button1_Click(System::Object^
sender, System::EventArgs^ e)
{
String ^str1 = "I Wanna go!";
String ^str2 = "I decided not to go!";
int i = String::Compare(str1,str2);
textBox1->Text = i.ToString();
}
Strings in Action
• Testing Strings for Equality (bool):– You call the Equals method to determine whether two strings are
equal.
Strings in Action
private: System::Void button1_Click(System::Object^ sender,
System::EventArgs^ e)
{
String ^str1 = "I Wanna go!";
String ^str2 = "I decided not to go!";
bool b= String::Equals(str1,str2);
textBox1->Text = b.ToString();
}
Strings in Action
private: System::Void button1_Click(System::Object^ sender,
System::EventArgs^ e)
{
String ^str1 = "I Wanna go!";
String ^str2 = "I Wanna go!";
bool b = String::Equals(str1,str2);
textBox1->Text = b.ToString();
}
true
Strings in Action
private: System::Void button1_Click(System::Object^ sender,
System::EventArgs^ e)
{
String ^str1 = "I Wanna go!";
String ^str2 = "I Wanna go! ";
bool b = String::Equals(str1,str2);
textBox1->Text = b.ToString();
}
false
Strings in Action
• Finding Characters in a String :– The String class includes two kinds of search methods:
• Methods that return a “ bool” value to indicate whether a particular substring is present in a string instance. These include the Contains, EndsWith, and StartsWith methods.
• Methods that indicate the starting position of a substring in a string instance “int”. These include the IndexOf,IndexOfAny, LastIndexOf, and LastIndexOfAny methods.
Strings in Action
• String::Contains Method (bool)– Returns a value indicating whether the specified String object occurs
within this string.
Strings in Action
{String^ s1 = "The brown fox jumps over the lazy dog";String^ s2 = "fox";bool b;b = s1->Contains( s2 );Console::WriteLine( "Is the string, s2, in the string, s1?: {0}", b );
}
Is string , s2, in string, s1? True
Strings in Action
• String::IndexOf Method (int)– Reports the index of the first occurrence of one or more characters,
or the first occurrence of a string, within this string.
– This member is overloaded. For complete information about this member, including syntax, usage, and examples, click a name in the overload list.
Name Description
IndexOf(Char) Reports the index of the first occurrence of the specified Unicode character in this string.
IndexOf(String) Reports the index of the first occurrence of the specified string in this instance.
IndexOf(Char, Int32) Reports the index of the first occurrence of the specified Unicode character in this string. The search starts at a specified character position.
IndexOf(String, Int32) Reports the index of the first occurrence of the specified string in this instance. The search starts at a specified character position.
IndexOf(String, StringComparison)
Reports the index of the first occurrence of the specified string in the current Stringobject. A parameter specifies the type of search to use for the specified string.
IndexOf(Char, Int32, Int32)
Reports the index of the first occurrence of the specified character in this instance. The search starts at a specified character position and examines a specified number of character positions.
IndexOf(String, Int32, Int32)
Reports the index of the first occurrence of the specified string in this instance. The search starts at a specified character position and examines a specified number of character positions.
IndexOf(String, Int32, StringComparison)
Reports the index of the first occurrence of the specified string in the current Stringobject. Parameters specify the starting search position in the current string and the type of search to use for the specified string.
IndexOf(String, Int32, Int32, StringComparison)
Reports the index of the first occurrence of the specified string in the current Stringobject. Parameters specify the starting search position in the current string, the number of characters in the current string to search, and the type of search to use for the specified string.
int main(array<System::String ^> ^args)
{
Console::WriteLine(L"Hello World");
// Create a Unicode String with 5 Greek Alpha characters
String^ szGreekAlpha = gcnew String( L'\x0319',5 );
// Create a Unicode String with a Greek Omega character
wchar_t charArray5[3] = {L'\x03A9',L'\x03A9',L'\x03A9'};
String^ szGreekOmega = gcnew String( charArray5,2,1 );
String^ szGreekLetters = String::Concat( szGreekOmega, szGreekAlpha, szGreekOmega-
>Clone() );
// Examine the result
Console::WriteLine( szGreekLetters );
// The first index of Alpha
int ialpha = szGreekLetters->IndexOf( L'\x0319' );
// The last index of Omega
int iomega = szGreekLetters->LastIndexOf( L'\x03A9' );
Console::WriteLine( String::Concat( "The Greek letter Alpha first appears at
index ", Convert::ToString( ialpha ) ) );
Console::WriteLine( String::Concat( " and Omega last appears at index ",
Convert::ToString( iomega ), " in this String." ) );
return 0;
}
Strings in Action
Hello World
Ω?????Ω
The Greek letter Alpha first appears at index 1
and Omega last appears at index 6 in this String.
Press any key to continue . . .
Strings in Action–Trim() method
• String::Trim Method– Removes all leading and trailing white-space characters from the
current String object.
int main(){
String^ animal1 = "fox";String^ animal2 = "dog";String^ strTarget = String::Format( "The {0} jumped over the {1}.", animal1, animal2 );
Console::WriteLine( "The original string is:{0}{1}{0}", Environment::NewLine, strTarget );
Console::Write( "Enter an adjective (or group of adjectives) to describe the {0}: ==> ", animal1 );
String^ adj1 = Console::ReadLine();
Console::Write( "Enter an adjective (or group of adjectives) to describe the {0}: ==> ", animal2 );
String^ adj2 = Console::ReadLine();adj1 = String::Concat( adj1->Trim(), " " );adj2 = String::Concat( adj2->Trim(), " " );strTarget = strTarget->Insert( strTarget->IndexOf( animal1 ), adj1 );strTarget = strTarget->Insert( strTarget->IndexOf( animal2 ), adj2 );
Console::WriteLine( " {0}The final string is: {0} {1}", Environment::NewLine, strTarget );}
Strings in Action
The original string is:The fox jumped over the dog.
Enter an adjective (or group of adjectives) to describe the fox: ==> bold
Enter an adjective (or group of adjectives) to describe the dog: ==> lazy
The final string is:The bold fox jumped over the lazy dog.
Strings in Actionprivate: System::Void button1_Click(System::Object^ sender,
System::EventArgs^ e)
{
String ^str1 = "I Wanna go!";
String ^str2 = "I DeciDEd not to go!";
str2 = str2->ToLower();
textBox1->Text = str2;
}
Strings in Actionprivate: System::Void button1_Click(System::Object^ sender,
System::EventArgs^ e)
{
String ^str1 = "I Wanna go!";
String ^str2 = "I decided not to go! ";
str2 = (str2->ToLower())->Trim() ;
textBox1->Text = str2+str1;
}
Strings in Actionprivate: System::Void button1_Click(System::Object^ sender,
System::EventArgs^ e)
{
String ^str1 = "I Wanna go!";
String ^str2 = “ I DeCided not to go! ";
str2 = (str2->ToLower())->Trim() ;
textBox1->Text = str2;
}
Strings in Action
• String::Copy Method (String to String)– Creates a new instance of String with the same value as a specified String.
// Sample for String::Copy()using namespace System;int main(){
String^ str1 = "abc";String^ str2 = "xyz";Console::WriteLine( "1) str1 = '{0}'", str1 );Console::WriteLine( "2) str2 = '{0}'", str2 );Console::WriteLine( "Copy..." );str2 = String::Copy( str1 );Console::WriteLine( "3) str1 = '{0}'", str1 );Console::WriteLine( "4) str2 = '{0}'", str2 );
}
1) str1 = 'abc'2) str2 = 'xyz'Copy...3) str1 = 'abc'4) str2 = 'abc'
Strings in Action
• String::CopyTo Method (String)– Copies a specified number of characters from a specified position in
this instance to a specified position in an array of Unicode characters.
Strings in Action
• Parameters– sourceIndexType: System::Int32
The index of the first character in this instance to copy.
– destinationType: array<System::Char>An array of Unicode characters to which characters in this instance are copied.
– destinationIndexType: System::Int32The index in destination at which the copy operation begins.
– countType: System::Int32The number of characters in this instance to copy to destination.
using namespace System;int main(){
// Embed an array of characters in a stringString^ strSource = "changed";array <Char> ^destination = {'T','h','e',' ','i','n','i','t','i','a','l','
','a','r','r','a','y'};
// Print the char arrayConsole::WriteLine( destination );
// Embed the source string in the destination stringstrSource->CopyTo( 0, destination, 4, strSource->Length );
// Print the resulting arrayConsole::WriteLine( destination );strSource = "A different string";
// Embed only a section of the source string in the destinationstrSource->CopyTo( 2, destination, 3, 9 );
// Print the resulting arrayConsole::WriteLine( destination );
}
Strings in Action
The initial array
The changed array
Thedifferentarray
Press any key to continue . . .
Strings in Action
• String::Replace Method (String , String)– Returns a new string in which all occurrences of a specified string in
the current instance are replaced with another specified string.
Strings in Action
using namespace System;int main(){
String^ errString = "This docment uses 3 other docments to docment the docmentation";
Console::WriteLine( "The original string is:\n'{0}'\n", errString );
// Correct the spelling of S"document".String^ correctString = errString->Replace( "docment", "document" );Console::WriteLine( "After correcting the string, the result is:\n'{0}'",
correctString );}
This code example produces the following output:The original string is:'This docment uses 3 other docments to docment the docmentation'
After correcting the string, the result is:'This document uses 3 other documents to document the documentation'
SubString()
SubString()private: System::Void button1_Click(System::Object^ sender,
System::EventArgs^ e)
{
String ^str1 = "I Wanna go!";
String ^str2 = "I decided not to go! ";
String ^TempStr = "";
TempStr = str2->Substring(3);
textBox1->Text = TempStr;
}
SubString()private: System::Void button1_Click(System::Object^ sender,
System::EventArgs^ e)
{
String ^str1 = "I Wanna go!";
String ^str2 = "I decided not to go! ";
String ^TempStr = "";
TempStr = str2->Substring(3,3);
textBox1->Text = TempStr;
}
That’s it for today!