2011-02-04 3 views
0

VB6.0 응용 프로그램에서 VB.net 2010 응용 프로그램으로 변환을 수정하려고합니다. 모든 것이 잘되었지만 약간 슬리밍을했습니다. 목록 상자 NewIndexOLE 컨트롤.VB6을 .net NewIndex & OLE1로 업그레이드

다음은 변환 될 것 같지 수있는 문제 라인은 다음과 같습니다

VB6.SetItemData(lstARCurrent, lstARCurrent.NewIndex, (.Fields("approval_s").Value)) 
OLE1.CreateLink(strFileName) 
OLE1.DoVerb(vbOLEOpen) 

사람이이 문제를 해결하기 위해 어떤 선동이 있으면 내가 이러한 오류 주위에 방법을 찾을 수없는 것처럼 그이 좋은 것입니다!

감사합니다.

데이빗

+0

컴파일 오류 메시지 또는 런타임 예외 메시지가 표시됩니까? 어떤 메시지의 정확한 표현을 게시 할 수 있습니까? – MarkJ

답변

1

이상한 일입니다. VB6에서는 다음과 같이 처리합니다 :

lstARCurrent.Add(someString) 
lstARCurrent.ItemData(lstARCurrent.NewIndex) = myLongKey 

문자열을 목록 상자에 저장하지만 데이터베이스 ID를 연결하는 좋은 방법이었습니다.

귀하의 VB6.SetItemData 루틴이 동일한 일을한다고 가정합니다. 그러나 .NET에서는 작동하지 않습니다. 예를 들어 VB6의 목록 상자에있는 항목은 0 기반 대신 1 기반이므로 문제가 발생할 수 있지만 .NET 목록 상자에는 .NewIndex 속성이 없을 가능성이 큽니다. 또한 목록 상자에는 ItemData 배열 속성이 없습니다.

이 처리하는 새로운 방법은 전체 개체를 추가하고 .ToString 방법을 표시 할 것을 목록 상자 말할 수 있도록하는 것입니다 (C 번호 : 미안, 내 VB.Net는 녹슨) :

class MyItem 
{ 
    public int MyKey { get; set; } 
    public string MyStringValue { get; set; } 
    public override string ToString() 
    { 
     return this.MyStringValue; 
    } 
} 

그럼 그냥 추가 항목이 :

lstARCurrent.Items.Add(new MyItem() { MyKey = 3, MyStringValue = "abc" }); 

abc 표시하지만 당신은 MyItem 개체를 다시 얻을 수 lstARCurrent.SelectedItem를 사용할 수 있습니다.

+0

정보를 주셔서 감사합니다, Scott! :영형) – StealthRT

관련 문제