同样的做法在VS2003下可以运行,为什么在VS2005下不能运行,请高手指点
操作步骤:
拖一个ComboBox 到窗体上命名为ComboBoxName
进入代码  导入命名空间
vb.net为: Imports System.Data.SqlClient
c#为:using System.Data.SqlClient;
vb.net2003下的代码为:' 匯入命名空間
Imports System.Data.SqlClient
Public Class Form1
    Inherits System.Windows.Forms.Form
    ' CurrencyManager 物件的類別層級宣告
    Dim bmFoxStudio As BindingManagerBase'  这里是Windows 窗体设计器生成的代码,,就省了。
    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Me.ComboBoxName.DataSource = CreateDataSource()
        ComboBoxName.DisplayMember = "id"
        bmFoxStudio = Me.BindingContext(CreateDataSource())
    End Sub
    Private Function CreateDataSource() As ICollection
        Dim dt As New DataTable
        Dim dr As DataRow
        dt.Columns.Add(New DataColumn("id", GetType(Int32)))
        dt.Columns.Add(New DataColumn("PkID", GetType(String)))
        For i As Integer = 0 To 5
            dr = dt.NewRow()
            dr(0) = i
            dr(1) = "破晓之阳"
            dt.Rows.Add(dr)
        Next
        Dim dv As New DataView(dt)
        Return dv
    End Function    Private Sub ComboBoxName_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ComboBoxName.SelectedIndexChanged
        bmFoxStudio.Position = Me.ComboBoxName.SelectedIndex
    End Sub
End Classvb.net2005 代码:
Imports System.Data.SqlClient
Public Class Form1
    Dim bmFoxStudio As BindingManagerBase    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Me.ComboBoxName.DataSource = CreateDataSource()
        ComboBoxName.DisplayMember = "id"
        bmFoxStudio = Me.BindingContext(CreateDataSource())
    End Sub
    Private Function CreateDataSource() As ICollection
        Dim dt As New DataTable
        Dim dr As DataRow
        dt.Columns.Add(New DataColumn("id", GetType(Int32)))
        dt.Columns.Add(New DataColumn("PkID", GetType(String)))
        For i As Integer = 0 To 5
            dr = dt.NewRow()
            dr(0) = i
            dr(1) = "破晓之阳"
            dt.Rows.Add(dr)
        Next
        Dim dv As New DataView(dt)
        Return dv
    End Function
    Private Sub ComboBoxName_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ComboBoxName.SelectedIndexChanged
        bmFoxStudio.Position = Me.ComboBoxName.SelectedIndex
    End Sub
End Classc#.net2003代码:
// CurrencyManager 物件的類別層級宣告
BindingManagerBase bmFoxStudio;
private void ComboBoxName_SelectedIndexChanged(object sender, System.EventArgs e)
{
bmFoxStudio.Position = ComboBoxName.SelectedIndex;
} private void Form1_Load(object sender, System.EventArgs e)
{
ComboBoxName.DataSource = CreateDataSource( );
ComboBoxName.DisplayMember = "id";
            bmFoxStudio = this.BindingContext[CreateDataSource( )];
}
ICollection CreateDataSource( )
{
DataTable dt = new DataTable();
DataRow dr;
dt.Columns.Add(new DataColumn("id", typeof(Int32)));
dt.Columns.Add(new DataColumn("PkID", typeof(string)));
for (int i = 0; i < 6; i++)
{
dr = dt.NewRow();
dr[0] = i;
dr[1] = "破晓之阳";
dt.Rows.Add(dr);
}
DataView dv = new DataView(dt);
return dv;
}
c#.net2005 代码就省略了。

解决方案 »

  1.   

    说真的,我除了接分,不知道说啥好了。没看出你的问题是什么。你当csdn是在线编译器?
      

  2.   

    private void ComboBoxName_SelectedIndexChanged(object sender, System.EventArgs e)
    {
    bmFoxStudio.Position = ComboBoxName.SelectedIndex;
    }
      當我們運行程序時,bmFoxStudio.Position = ComboBoxName.SelectedIndex;就報錯。說什么沒有實例畫,但是在VS2003就不會報錯本身從程序本身是看不出錯誤來的。因為本身并沒有錯。如果大家想知道答案的話,必須得用VS2005測試下。
      

  3.   

    再說了。。如果就你們不用測試,光在這麗看就能看出問題來。。我還回來來這麗提問嗎??
    真是笑話。。我當我剛學啊。回答這位朋友:
    你有那么大的本事,一看就能看出來不。。不答就不答啊 。說什么在线编译器。
    wuyazhe(牛肉面) ( ) 信誉:100 说真的,我除了接分,不知道说啥好了。没看出你的问题是什么。你当csdn是在线编译器?
      

  4.   

    跟踪看看bmFoxStudio == null ???
      

  5.   

    在VS2005報錯並未將物件參考設定為物件的執行個體
    在VS2003是可以跑的。
    同樣的代碼,一個報錯。一個能運行。
      

  6.   

    danjiewu(阿丹) 沒有實例畫这种异常调试一下不就行了?
       有那么好調試  ,,我還用得著 請您來回來這個問題嗎?真是笑話。
      

  7.   

    代码稍做下修改就可以了
    bmFoxStudio = Me.BindingContext(CreateDataSource())
    改为
    bmFoxStudio = Me.BindingContext(Me.ComboBoxName.DataSource)
      

  8.   

    沒有測試,就不要回答了。。一句話。不行。再說了。我的問題是,VS2003能跑,VS2005下為什么就不能跑。
    Bote_China() 
    代码稍做下修改就可以了
    bmFoxStudio = Me.BindingContext(CreateDataSource())
    改为
    bmFoxStudio = Me.BindingContext(Me.ComboBoxName.DataSource)
      

  9.   

    Private Sub ComboBoxName_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ComboBoxName.SelectedIndexChanged
            Me.BindingContext(Me.ComboBoxName.DataSource).Position = Me.ComboBoxName.SelectedIndex
        End Sub
      

  10.   


    朋友 看看这个问题。http://community.csdn.net/Expert/topic/5686/5686047.xml?temp=.8212702
    --------------------------------------------------
    BS楼主到处发这种信息的行为,会答的又想答的自然会来答了,这样到处乱发只会使人感到讨厌
      

  11.   


    朋友 看看这个问题。http://community.csdn.net/Expert/topic/5686/5686047.xml?temp=.8212702
    --------------------------------------------------BS LZ
      

  12.   

    LZ所给出的代码是有两个明显的问题的;
    1、ComboBoxName绑定的数据源与BindingContext(CreateDataSource())中的数据源是两个对象.
    2、SelectIndexChange事件发生在为控件指定DataSource时,此时
    bmFoxStudio 为Nothing,所以会报错,至于2003为什么没有抛出异常,还不知道原因,不过可以加上try catch语句,异常是可以捕捉到的。
      

  13.   

    所以代码最好改为
     Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
         Me.ComboBoxName.DataSource = CreateDataSource()
         ComboBoxName.DisplayMember = "id"
     End Sub
     Private Function CreateDataSource() As ICollection
         Dim dt As New DataTable
         Dim dr As DataRow
         dt.Columns.Add(New DataColumn("id", GetType(Int32)))
         dt.Columns.Add(New DataColumn("PkID", GetType(String)))
         For i As Integer = 0 To 5
             dr = dt.NewRow()
             dr(0) = i
             dr(1) = "破晓之阳" & i
             dt.Rows.Add(dr)
         Next
         Dim dv As New DataView(dt)
         Return dv
     End Function
     Private Sub ComboBoxName_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ComboBoxName.SelectedIndexChanged
         Me.BindingContext(Me.ComboBoxName.DataSource).Position = Me.ComboBoxName.SelectedIndex
     End Sub
      

  14.   

    謝謝您的回答,程序是可以運行了。想再請問下您,VS2003能跑。VS2005不能跑。這是為什么呢?
    難到是:VS2005的debug嗎?
    Bote_China() Private Sub ComboBoxName_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ComboBoxName.SelectedIndexChanged
            Me.BindingContext(Me.ComboBoxName.DataSource).Position = Me.ComboBoxName.SelectedIndex
        End Sub
    可否把這個的debug 發給俺看看。
    wdzr_826(舞指如歌(学了.NET后才知道由一个坑跳进另一个坑)) 
    自己debug看看
    我從昨天發到今天,一個通宵了。好像就你一個說讨厌啊。。少數讨厌是可以理解的。不怪你,
    edmajia01() 

    朋友 看看这个问题。http://community.csdn.net/Expert/topic/5686/5686047.xml?temp=.8212702
    --------------------------------------------------
    BS楼主到处发这种信息的行为,会答的又想答的自然会来答了,这样到处乱发只会使人感到讨厌
      

  15.   

    wdzr_826(舞指如歌(学了.NET后才知道由一个坑跳进另一个坑))    
    自己debug看看  靠,debug,我不是看了啊我上面又寫,就你這人,說得都不是能解答問題的。就別說了。
      

  16.   

    要说Bug的话只能说是2003的bug,因为 bmFoxStudio.Position = Me.ComboBoxName.SelectedIndex应该是会抛出异常的,而程序运行过程中如果未加try ..catch时就不会出现异常,这可能是bug吧
      

  17.   

    靠,,不就是發了

    朋友 看看这个问题。http://community.csdn.net/Expert/topic/5686/5686047.xml?temp=.8212702
    這個嗎?   就個個說LZ。
    再說了。。我的問題是  VS2003能跑。VS2005不能跑。這是為什么。
    你們所給出的信息。本身我之前就做過測試。我本身就知道是那么回事。你這樣一改 BindingManagerBase bmFoxStudio;
    不是 沒用上嗎?  本身這個問題  就是在測試它的用法啊。但是我的問題是
    VS2003能跑。VS2005不能跑。這是為什么。
      

  18.   

    我明白你的意思。。  您說bmFoxStudio 为Nothing,所以会报错    那么你給它個1值,照樣會報錯,我感覺好像是ComboBox 的問題。。
    Bote_China() 
    要说Bug的话只能说是2003的bug,因为 bmFoxStudio.Position = Me.ComboBoxName.SelectedIndex应该是会抛出异常的,而程序运行过程中如果未加try ..catch时就不会出现异常,这可能是bug吧
      

  19.   

    zhaoxiaoyang5156() ( ) 信誉:100  2007-8-1 8:31:53  得分: 0  
     
     
       
    再說了。。如果就你們不用測試,光在這麗看就能看出問題來。。我還回來來這麗提問嗎??
    真是笑話。。我當我剛學啊。回答這位朋友:
    你有那么大的本事,一看就能看出來不。。不答就不答啊 。說什么在线编译器。
    wuyazhe(牛肉面) ( ) 信誉:100 说真的,我除了接分,不知道说啥好了。没看出你的问题是什么。你当csdn是在线编译器?
      
     你帖子错误提示都不写。又不是个常见问题。只帖了一段。谁愿意一行一行的读完找错误??
    上面回答你问题的人是不是都看了你写的错误提示才回答的?你怎么提问这么不耐烦呢?本来这个问题在这里就是很难得到答案的。你说05编译不通过。升级编译不通过的多了去了。除了自己调试,跟踪代码。看什么地方是没有作的。自己修改。别人找。顶多是看看你说哪提示报错了。就回答你,该去看看什么,你反复声明自己不懂,但你一点也不谦虚。
    我不是高手。看到我的星星也该明白,我的热心成都,如果不想回答你问题。你在我的帖子里回复的时候,我就不来看你的问题了。ps:你这个问题我回答不了。不懂这方面的。
      

  20.   

    wuyazhe(牛肉面)  對不起了。
    因為這個東西。。只有測試才知道是怎么回事。不是一看就能看懂的。除非
      

  21.   

    曾经碰到过SelectedIndexChanged不能触发的情况,你可以查一下是不是这样的情况
      

  22.   

    再次 謝謝  Bote_China() 和各位朋友。
      

  23.   

    zhaoxiaoyang5156如果你再乱发你这个垃圾问题的连接,我就XX你全家。害得我每次都以为有答案,跑过去一看又是你这垃圾问题。
      

  24.   

    taick()   說話禮貌點。請管理員幫忙刪除  這條回復。  你點過來。只怪自己笨,沒看清楚就亂點。
    顶  “朋友  看看这个问题。http://community.csdn.net/Expert/topic/5686/5686047.xml?temp=.8212702  ”這話很清楚了。。是說看看這個問題。有沒說這是答案。
      

  25.   

    zhaoxiaoyang5156() 应该被直接封号。
      

  26.   

    参见
    http://community.csdn.net/Expert/TopicView1.asp?id=5665468
    http://community.csdn.net/Expert/TopicView1.asp?id=5665271
      

  27.   

    为什么要封我的号。。
    “朋友  看看这个问题。http://community.csdn.net/Expert/topic/5686/5686047.xml?temp=.8212702  ”這話很清楚了。。是說看看這個問題。有沒說這是答案。
    奇怪了。。我分给出去了。。为什么  你们还可以进来说话啊。。朋友。
    r0ex(地狱门神)  再说了。那样我也是帮你顶了一下啊。。你知道不。顶了一下。你就会到前面去的再说了我用这种方法  还真有效果。。在这个里面找到了答案。。再次谢谢Bote_China() 和各位朋友。
    r0ex(地狱门神)   你看你的 。不是我顶了一下。还没有人顶呢?? 还怪我,,自己没看清楚吧了。。