ورود

View Full Version : سوال: درخواست کمک در قسمت ساختارهای کتاب آقای هاشمیان درwpf



کاربر مبتدی
شنبه 21 بهمن 1391, 09:30 صبح
باسلام
از اساتید محترم من سعی کردم مباحث کتاب آقای هاشمیان را با wpf پیش بروم ولی گویا بعضی از دستورات با وین اپ متفاوت است لذا خواهشمندم کد برنامه زیر را برایم اصلاح کنید البته خودم سعی کردم موفق نشدم.
در صورت امکان توضیح مبتدی فهم فراموش نشود. مشخصاً خط 39-40 و 72 به بعد


using System;
using System . Collections . Generic;
using System . Linq;
using System . Text;
using System . Threading . Tasks;
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;
using System . Collections;

namespace structureDEMO
{

public partial class MainWindow : Window
{
//++++++++++++++++++++++++++++++++++++++++++++++++++
private ArrayList objCustomers = new ArrayList ( );
//++++++++++++++++++++++++++++++++++++++++++++++++++
private void DisplayCustomer ( Customer objCustomer )
{
// شرح: 188-2
txtName . Text = objCustomer . Name;//شرح: 191
txtFirstName . Text = objCustomer . FirstName;
txtLastName . Text = objCustomer . LastName;
txtEmail . Text = objCustomer . Email;
}
//+++++++++++++++++++++++++++++++++++++++++++++++++
public Customer SelectedCustomer
{
get
{
// return ( Customer ) lstCustomers . Items [ lstCustomers . SelectedIndex ];
ListBoxItem lstitem = lstCustomers . SelectedItem as ListBoxItem;
return ( Customer ) lstitem . Content;
}
}
//++++++++++++++++++++++++++++++++++++++++++++++++++ ++
public MainWindow ( )
{
InitializeComponent ( );
}
//++++++++++++++++++++++++++++++++++++++++++++++++++ +
private void btnText_Click ( object sender , EventArgs e )
{
// شرح: 193
CreateCustomer ( "Darrel" , "Hilton" , "dhilton@somecompany.com" );
CreateCustomer ( "Frank" , "Peoples" , "fpeoples@somecompany.com" );
CreateCustomer ( "Bill" , "Scott" , "bscott@somecompany.com" );
}
//+++++++++++++++++++++++++++++++++++++++++++++++++
public void CreateCustomer ( string FirstName ,
string LastName , string Email )
{
// Declare a customer object
Customer objNewCustomer;
// Create the new customer
objNewCustomer . FirstName = FirstName;
objNewCustomer . LastName = LastName;
objNewCustomer . Email = Email;
// Add the new customer to the list
objCustomers . Add ( objNewCustomer );
// Add the new customer to the ListBox control
lstCustomers . Items . Add ( objNewCustomer );
}
//++++++++++++++++++++++++++++++++++++++++++++++++++ +++++++++
private void btnDelete_Click ( object sender , EventArgs e )
{
// If no customer is selected in the ListBox then...
if ( lstCustomers . SelectedIndex == -1 )
{
// Display a message
MessageBox . Show ( "You must select a customer to "+ "delete!" , "Structure Demo" );
// Exit the method
return;
}
// Prompt the user to delete the selected customer
DialogResult result = MessageBox . Show ("Are you sure you want to delete " + SelectedCustomer . Name + "? " , "Structure Demo" ,MessageBoxButton . YesNo , MessageBoxImage . Question );
//MessageBoxButtons . YesNo , MessageBoxIcon .Question );
//if ( result == DialogResult . Yes )
if (result==DialogResult.Yes)

{
// Get the customer to be deleted
Customer objCustomerToDelete = SelectedCustomer;
// Remove the customer from the ArrayList
objCustomers . Remove ( objCustomerToDelete );
// Remove the customer from the ListBox
lstCustomers . Items . Remove ( objCustomerToDelete );
}
}
//++++++++++++++++++++++++++++++++++++++++++++++++++ ++++++
}
}

کاربر مبتدی
یک شنبه 29 بهمن 1391, 12:57 عصر
صفر پاسخ خیلی مایوس کننده است.:افسرده:

مهدی فرزاد
دوشنبه 30 بهمن 1391, 11:19 صبح
سلام
فایلی رو که درست کردید قرار بدید تا براتون اصلاح کنم و توضیح بدم

کاربر مبتدی
چهارشنبه 02 اسفند 1391, 09:07 صبح
100284باتشکر از زحمات شما

مهدی فرزاد
شنبه 05 اسفند 1391, 09:11 صبح
سلام
اشکالاتی که وجود داشت رو من براتون توضیح میدم
1- اول یک اشتباه لپی داشتید و در کد Xaml برای اونت کلیک دکمه Delete نوشته بودید

Click="txtDelete_Click"

که باید میشد

Click="btnDelete_Click"


2- ما در WPF از DialogResult استفاده نمی کنیم میشه اینجوری نوشت

var result = MessageBox . Show ( "Are you sure you want to delete " + SelectedCustomer.Value + "? " , "Structure Demo" ,MessageBoxButton . YesNo , MessageBoxImage . Question );
//MessageBoxButtons . YesNo , MessageBoxIcon .Question );
//if ( result == DialogResult . Yes )
if (result == MessageBoxResult.Yes)

{
// Get the customer to be deleted
Customer? objCustomerToDelete = SelectedCustomer;
// Remove the customer from the ArrayList
objCustomers . Remove ( objCustomerToDelete );
// Remove the customer from the ListBox
lstCustomers . Items . Remove ( objCustomerToDelete );
}
}


3- شما در کدوتون خاصیتی دارید که نوشته شده


public Customer SelectedCustomer {
get
{
// return ( Customer ) lstCustomers . Items [ lstCustomers . SelectedIndex ];
ListBoxItem lstitem = lstCustomers . SelectedItem as ListBoxItem;
return ( Customer ) lstitem . Content;
}
}


که قرار مقدار select شده رد ListBox رو بر گردونه
اولا نیازی به استفاده از این روش نیست اما صحیح اون در WPF به این شکل هست

public Customer? SelectedCustomer
{
get
{
Customer? lstitem = (lstCustomers.SelectedItem as Customer?);
return lstitem;
}
}


اگر دقت کنید در کنار Customer علامت ؟ قرار گرفت چون WPF کمی هوشمند تر عمل مبکنه و احتمال اینکه مقدار برگشتی Null باشه رو نیز در نظر میگیره پس به شما اجازه نخواهد داد که از خواصیتی که null پذیر نیست استفاده کنید

درضمن استفاده از

ListBoxItem lstitem = lstCustomers . SelectedItem as ListBoxItem;
return ( Customer ) lstitem . Content;



در WPF به شکلی هست که من در بالا نوشتم و کد شما ساپورت نمیشه

4- در مسیج باکس delete شما باید بنویسید SelectedCustomer.Value.Name و همچنین در پایین اون هم باز باید Customer رو با علامت سئوال به کار ببرید

در کل این روش کار مال Winapp هست و در WPF با وجود توان Bind کنترل ها از این روش استفاده نمیشه این کار یعنی لقمه رو دور سر چرخوندن