- PR -

DataGridViewでcellをドラッグ選択すると例外が発生する

投稿者投稿内容
kozoo
会議室デビュー日: 2007/06/06
投稿数: 6
投稿日時: 2007-06-06 08:04
環境------------
Windows XP Pro
VS2005 C#
----------------
皆様おはようございます。
早速質問ですが、新しいプロジェクトからWindowsアプリケーションを選び開始して
出来たForm1にDataGridViewを貼り付けてDataGridViewタスクで列を10個追加し
親コンテナ(Form1)にドッキングさせます。
(出来た列名を画面左からColumn1〜10とします。)

この状態で実行(デバック開始)してColumn5の幅をDataGridViewに一度に表示できる
幅より手動で広げてからColumn1のcellを選択してColumn10へ向かってドラッグ選択を
開始するとColumn5が表示された直後に例外が発生します。

class Program
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new Form1());  ←例外が発生する箇所
}

例外の内容は
--------------------------------------------------------------------------
ArgumentOutOfRangeException はハンドルされませんでした。
インデックスが範囲を超えています。負でない値で、コレクションのサイズよりも
小さくなければなりません。
パラメータ名: index
--------------------------------------------------------------------------
と表示されます。

Column10からColumn1に向かってドラッグする時は発生しません。
コードを手動で追加していないので対処方法に困っております。
対処方法をお教えいただけないでしょうか?
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2007-06-06 09:27
引用:

kozooさんの書き込み (2007-06-06 08:04) より:

例外の内容は
--------------------------------------------------------------------------
ArgumentOutOfRangeException はハンドルされませんでした。
インデックスが範囲を超えています。負でない値で、コレクションのサイズよりも
小さくなければなりません。
パラメータ名: index
--------------------------------------------------------------------------


スタックトレースが欲しいですね。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
kozoo
会議室デビュー日: 2007/06/06
投稿数: 6
投稿日時: 2007-06-06 11:12
じゃんぬねっとさま>
ご回答ありがとうございます。

---------------------------------------------------------------
System.ArgumentOutOfRangeException はハンドルされませんでした。
Message="インデックスが範囲を超えています。負でない値で、コレクションのサイズよりも小さくなければなりません。\\\\r\\\\nパラメータ名: index"
Source="mscorlib"
ParamName="index"
StackTrace:
場所 System.Collections.ArrayList.get_Item(Int32 index)
場所 System.Windows.Forms.DataGridViewColumnCollection.get_Item(Int32 index)
場所 System.Windows.Forms.DataGridView.GetOutOfBoundCorrectedHitTestInfo(HitTestInfo& hti, Int32& mouseX, Int32& mouseY, Int32& xOffset, Int32& yOffset)
場所 System.Windows.Forms.DataGridView.OnMouseMove(MouseEventArgs e)
場所 System.Windows.Forms.Control.WmMouseMove(Message& m)
場所 System.Windows.Forms.Control.WndProc(Message& m)
場所 System.Windows.Forms.DataGridView.WndProc(Message& m)
場所 System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
場所 System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
場所 System.Windows.Forms.NativeWindow.DebuggableCallback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
場所 System.Windows.Forms.UnsafeNativeMethods.DispatchMessageW(MSG& msg)
場所 System.Windows.Forms.Application.ComponentManager.System.Windows.Forms.UnsafeNativeMethods.IMsoComponentManager.FPushMessageLoop(Int32 dwComponentID, Int32 reason, Int32 pvLoopData)
場所 System.Windows.Forms.Application.ThreadContext.RunMessageLoopInner(Int32 reason, ApplicationContext context)
場所 System.Windows.Forms.Application.ThreadContext.RunMessageLoop(Int32 reason, ApplicationContext context)
場所 System.Windows.Forms.Application.Run(Form mainForm)
場所 WindowsApplication1.Program.Main() 場所 C:\\\\WindowsApplication1\\\\WindowsApplication1\\\\Program.cs:行 17
場所 System.AppDomain.nExecuteAssembly(Assembly assembly, String[] args)
場所 System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args)
場所 Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()
場所 System.Threading.ThreadHelper.ThreadStart_Context(Object state)
場所 System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
場所 System.Threading.ThreadHelper.ThreadStart()
---------------------------------------------------------------
このような内容が取れましたが、何かおわかりになるでしょうか?
よろしくお願いします。
kozoo
会議室デビュー日: 2007/06/06
投稿数: 6
投稿日時: 2007-06-09 12:17
WEBで情報を探してみましたがまったく見つからずOSからインストールしなおして
みましたがまったく変わらず・・・
他の方はこの現象発生しないのでしょうか?
rain
ぬし
会議室デビュー日: 2006/10/19
投稿数: 549
投稿日時: 2007-06-09 12:52
Windows XP Pro(SP2)、VS2005 C# および VB# で再現を確認しました。

原因や対処はまったく見当がつきませんが…。
kozoo
会議室デビュー日: 2007/06/06
投稿数: 6
投稿日時: 2007-06-09 13:41
rainさま
確認ありがとうございます。

発生しますか・・・
例外が発生する場所が場所だけに対応もできず本当に困りました。
対応方法がないとDataGridViewの幅より広いColumnを作れなくなりますよね。
DataGridViewを使ってアプリを作ってる人はどうするんだろう?
rain
ぬし
会議室デビュー日: 2006/10/19
投稿数: 549
投稿日時: 2007-06-09 14:33
思いついたままに書いてみます。

・複数セルを選択できないようにする
DataGridView.MultiSelectプロパティがfalseであれば、
同じ操作をしてもドラッグにならないので例外は発生しないようです。

・セルの幅を固定にする
本当は広げようとしてもある幅以上にはできないのが嬉しいのですが、
DataGridViewColumnにはMaximumWidthみたいなプロパティはないんですね…。

使えるかどうかは要件次第だと思いますが、参考になれば。
kozoo
会議室デビュー日: 2007/06/06
投稿数: 6
投稿日時: 2007-06-09 16:03
rainさま
色々な参考意見ありがとうございます。

引用:

・複数セルを選択できないようにする
DataGridView.MultiSelectプロパティがfalseであれば、
同じ操作をしてもドラッグにならないので例外は発生しないようです。


元々この例外に気がついたのがExcelみたいにマウスにより複数Cellを
カット&コピーできるようにしようと思ったところからなのです。
それによりMultiSelectをfalseに出来ず何か方法が無いか調べましたが見つからずご相談
させていただきました。

引用:

・セルの幅を固定にする
本当は広げようとしてもある幅以上にはできないのが嬉しいのですが、
DataGridViewColumnにはMaximumWidthみたいなプロパティはないんですね…。


この方法を試してみました。
が、フォームの大きさを手動で変更するのに伴ってDataGridViewの表示幅が
小さくなるとColumn幅が変わらなくても同様な例外が発生してしまうようです。

ただ、試しているうちに[Shift]+[→]のようにキーボードで選択すれば
例外が発生しないことが分りました。
マウスでのCellの複数選択だけに問題がありそうです。

スキルアップ/キャリアアップ(JOB@IT)