我正在将用VB6编写的旧程序转换为C#WPF,而且这段代码我很难尝试转换。
在我们的旧VB6项目中。代码编写如下:
Select Case paymentType
Case "CASH":
Set dlgpayment = New dlgPaymentCash
dlgPaymentCash.lblChange = format(-gvAmountDue - gvAddOnAmount, "0.00") '/NJ-2011/10/25 Added gvAddOnAmount
Case "CARD":
If PaymentTypeSupports(gvPaymentType, "multiple") And PaymentTypeSupports(gvPaymentType, "remember") And TypeName(dlgpayment) = "dlgPaymentCreditCard" Then
Else
Set dlgpayment = New dlgPaymentCreditCard
End If
dlgPayment
宣布为:
Window dlgPayment = new Window();
所以每当我想继承其他窗口时,我只会像这样编写代码:
Set dlgPayment = new dlgPaymentCash //dlgPaymentCash is a form.
每当我这样做时,我能够像dlgPaymentCreditCard
一样以dlgPaymentCash.lblChange
的形式访问控件,但它在C#中不起作用。
这大致是转换:
switch (paymentType) {
case "CASH":
var dlgpayment = new dlgPaymentCash();
dlgPaymentCash.lblChange = string.Format("{0:0.00}", -gvAmountDue - gvAddOnAmount);
//NJ-2011/10/25 Added gvAddOnAmount
break;
case "CARD":
if (PaymentTypeSupports(gvPaymentType, "multiple")
&& PaymentTypeSupports(gvPaymentType, "remember")
&& typeof(dlgpayment) == "dlgPaymentCreditCard") {
//.....
} else {
var dlgpayment = new dlgPaymentCreditCard();
}
break;
}
如果format()
函数是标准VB6函数,您可以使用string.Format()
函数,或简单地使用.ToString()
函数。
您可以通过调用Window Name.Variable Name来访问Window中的变量,如下所示:
switch(paymentType)
{
case "CASH":
Window dlgPayment = new Window();
//Access variable lblChange in dlgPayment
dlgPayment.lblChange="something";
break;
case "CARD":
break;
default:
break;
}
假设您创建了一个继承Window类的类(代表表单):
在xaml.cs中
public partial class PaymentDialog : Window //inherit Window
{
public string lblChange {get;set;} //this should be a textblock/label in xaml, but i just assume it is a string.
}
您需要通过以下方式创建PaymentDialog的实例:
PaymentDialog dlgPayment = new PaymentDialog(); //notice the different
dlgPayment.lblChange = "XXX"; //you now can access it
Window dlgPaymentWindow = new Window();
dlgPaymentWindow.lblChange = "XXX";//you cannot access it since
//lblChange is not exist in WPF Window class