2008年10月30日 星期四

物件陣列與初始化

物件陣列與初始化 筆記
若想要以非物件的預設建構子去初始化一個物件陣列時
要怎麼做呢
請參考底下的程式碼


#include
#include
#include
#include

using namespace std;

class car {
int price;
string name;
public:
//car():price(100), name("ford"){}
car();
car(int, string);
void show();
};

car::car()
{
price = 100;
name = "ford";
}

car::car(int i, string str)
{
price = i;
name = str;
}

void car::show()
{
cout << price << " " << name << endl;
}

int main()
{
car car1, car2(120, "bmw");

//default constructor
car1.show();
//initial by manual
car2.show();
//object array and initial by manual
car car3[5] = {car(1, "bmw z1"), car(2, "bmw z2"), car(3, "bmw z3"),
car(4, "bmw z4"), car(5, "bmw z5")};
//using vector to create 101 objects with the same value
vector car4;


for(int i = 0; i != 5; i++) {
car3[i].show();
}
for(int i = 0; i != 10; ++i) {
car4.push_back(car2);
car4[i].show();
}

//The following two ways are wrong!
//car *ptr = new car(111, "benz")[3];
//car *ptr = new car[3](111, "benz");

return 0;
}


輸出結果如下:
100 ford
120 bmw
1 bmw z1
2 bmw z2
3 bmw z3
4 bmw z4
5 bmw z5
120 bmw
120 bmw
120 bmw
120 bmw
120 bmw
120 bmw
120 bmw
120 bmw
120 bmw
120 bmw

結論是用 car array_car[5](1, "xx")
或是 car array_car(1,"xx")[5] 都是錯的 Orz

2008年10月29日 星期三

大家好原來這裡可以不只一個作者!!

只要送出邀請給對方
然後就可以加入成為blog的作者!
最多可以加到100位....這樣以後就不會有幽靈文章了

getElementsByTagName vs. getElementsByName

上一篇"多個RadioButtonList設為相同Group"裡面有用到getElementsByTagName
有人會說既然有把name(即paramOldName)傳入,何不直接使用getElementsByName
就不需要多這個判斷式
 
if(ObjArray[i].type == "radio" && ObjArray[i].name == paramOldName)


這裡說一下理由 (這部份要感謝昌琰)
因為getElementsByName找到的Object只能改name以外的屬性!!
我試過了連ID也可以改,就是只有name不能被修改
所以只好用getElementsByTagName收集大範圍的物件,再透過if判斷式過濾
By Felix

2008年10月28日 星期二

Code posting

若要在此貼上程式碼,
請依下列方式:



Dim felix_liu as String
felix_liu = "blue"
felix_liu += " underwear"



目前支援
C++:cpp, c, c++
Java :java
Sql :sql
VB :vb, vb.net
XML: xml

P.S. Google pages 不給用了,Google sites 聽說也不能放 js 檔,
找了 boxstor 空間上傳,但是用來放 js 不太穩定,會時有時無,
最後就只好用 derrick 的,並且放棄 easy read more 的功能 Orz 。

參考網址及js來源:http://sharedderrick.blogspot.com/2007/12/blogger-syntaxhighlighter.html

把多個RadioButtonList設為相同Group

問題: 如果頁面上有多組RadioButtonList,要做到這幾組RadioButtonList間都只能單選,例如:
50cc機車 125cc機車 150cc以上機車

休旅車 跑車 房車

如果上下兩排各是一個RadioButtonList如何讓他們都屬與同一group
當然,我們可以只用html的radio button做到,只要name屬性設為一樣。但是如果想透過程式動態產生那些選項,RadioButtonList還蠻好用的。可惜它沒有name or groupname這個property可用!

我的作法是做一個含RadioButtonList的UserControl:

Partial Class UCRadioBtnList
Inherits System.Web.UI.UserControl

Private _GroupName As String

'提供設定RadioButton項目
Public WriteOnly Property Items() As String()
Set(ByVal value As String())
Dim ItemTemp As ListItem

For Each v As String In value
ItemTemp = New ListItem(v)
Me.RadioButtonList.Items.Add(ItemTemp)
Next
End Set End Property

'提供設定RadioButtonList的RroupName
Public Property GroupName() As String
Get
Return Me._GroupName
End Get
Set(ByVal value As String)
Me._GroupName = value
'把GropuName存在ViewState中,預防postback時消失
If IsNothing(Me.ViewState("GroupName")) Then
Me.ViewState("GroupName") = value
End If
End Set
End Property

'註冊一行會呼叫 function SetSameGroup( )的script到畫面
Private Sub SetSameGroup()
Dim StrScript As String

StrScript = "SetSameGroup('" & Me.ClientID & "$RadioButtonList','" &
Me.ViewState ("GroupName") & "');" & vbNewLine
ScriptManager.RegisterStartupScript(Me.Page, Me.Page.GetType(), Me.RadioButtonList.ClientID, StrScript, True)
End Sub

'畫面載入時都在註冊一次script(因為script在postback後就會自動消失)
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
Me.SetSameGroup()
End Sub

End Class


//javascript


function SetSameGroup(paramOldName, paramGroupName) {
var ObjArray = document.getElementsByTagName("Input");
var StrTemp;
for (i = 0; i < ObjArray.length; i++) {
if(ObjArray[i].type == "radio" && ObjArray[i].name == paramOldName) {
StrTemp = ObjArray[i].parentNode.innerHTML.replace(paramOldName, paramGroupName);
ObjArray[i].parentNode.innerHTML = StrTemp;
}
}
}


使用這個UserControl的畫面的.vb檔

Dim ArrayListSource1 As String() = {"aa", "bb", "cc", "dd"}
Dim ArrayListSource2 As String() = {"ee", "ff", "gg", "hh"}

Me.UCRadioBtnList1.Items = ArrayListSource1 '加入選項
Me.UCRadioBtnList2.Items = ArrayListSource2
Me.UCRadioBtnList1.GroupName = "sss" '設定GroupName
Me.UCRadioBtnList2.GroupName = "sss"

By Felix

2008年10月27日 星期一

k32討論版開張!