[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 2chのread.cgiへ]
Update time : 04/29 18:13 / Filesize : 234 KB / Number-of Response : 944
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

くだすれ.NET(超初心者向け)



1 名前:デフォルトの名無しさん [2006/10/07(土) 17:28:33 ]
このスレッドは
どんなに「くだ」らない.NETプログラミングに関する質問でも
誰かが優しくレスをしてくれる「すれ」っどです。
質問者自身何がなんだか分からない質問でも勇気をもって書き込んで
ください。お礼は.NETアプリケーションの普及と初心者の救済を
お願いします。

619 名前:デフォルトの名無しさん mailto:sage [2008/06/25(水) 20:21:17 ]
DirectX場合、GDI関数のようにGUIスレッドからしか操作できないという制限はあるの?
別に出来るなら自分でループまわすのが一番自然なんだけどな。

620 名前:デフォルトの名無しさん mailto:sage [2008/06/30(月) 22:49:53 ]
webサイトを作ろうとやっているわけなんですが、
アップの後に確認してみたところ、どうしても
Parser Error Message: Could not load the assembly 'App_Web_default.aspx.cdcab7d2'. Make sure that it is compiled before accessing the page.
と出てきてしまい
<%@ page language="C#" autoeventwireup="true" inherits="_Default, App_Web_default.aspx.cdcab7d2" %>
が悪いと出てくるわけなんですが、どうすればいいのか理解ができない状況です・・・

もし、ここが悪いんじゃね?っていうのがあれば教えていただければ幸いです。


621 名前:デフォルトの名無しさん mailto:sage [2008/06/30(月) 23:21:24 ]
ム板にもASP.NETスレはあるから行ってこいよ。
どうせマルチなら何ヶ所しても同じだろ。

622 名前:デフォルトの名無しさん mailto:sage [2008/07/04(金) 15:07:13 ]
C++のマネージ配列を強制的に開放することはできないのでしょうか?

623 名前:デフォルトの名無しさん mailto:sage [2008/07/04(金) 17:11:11 ]
参照をはずしてあとは祈れ

624 名前:デフォルトの名無しさん mailto:sage [2008/07/04(金) 17:23:26 ]
解放を制御したかったらアンマネージドでやれ

625 名前:デフォルトの名無しさん [2008/07/10(木) 03:15:04 ]
C++とかで直接書くのではなく、.NETをつかう利点てなに?


626 名前:デフォルトの名無しさん mailto:sage [2008/07/10(木) 05:27:56 ]
マイクロソフトは.NETにユーザー押し込めて囲いたいだけだろな
それに乗るか乗らないかだよね

627 名前:デフォルトの名無しさん mailto:sage [2008/07/10(木) 11:49:15 ]
C++は文法が難しすぎて



628 名前:デフォルトの名無しさん mailto:sage [2008/07/10(木) 12:18:08 ]
C++と.NETの2者選択ってのじゃなくて済み分けてるけどね。
.NETは生産性が高く、実行コストが高い。
C++は生産性が低く、実行コストが低い。
十分テストが出来て広く多数に使ってもらう用途にはC++。
WEBや企業内システムのような用途には.NETが向いてる。

629 名前:デフォルトの名無しさん [2008/07/12(土) 01:08:58 ]
array<Byte>の全体にmemset相当のことをしたいんだけど、どうすればいいの?

ループで回して1つずつセットした → かっこ悪い
pin_ptrしてmemsetした → 納得いかん
ForEachした → 大げさ過ぎる

630 名前:デフォルトの名無しさん mailto:sage [2008/07/12(土) 02:25:49 ]
>>629
かっこ悪いと一緒なんだが
static class Util {
  public static T [] setAll<T>(this T [] ar, T val) {
    for (int i=0; i<ar.Length; i++) ar[i] = val; return ar;
  }
}

double [] ar = new double[10].setAll(123.45);


631 名前:629 mailto:sage [2008/07/12(土) 15:36:08 ]
やっぱし、そういう手しかないのね。
0にしたい時だけはClearでいいようだけど。

初期状態を0xffにする時とかがねぇ。

632 名前:デフォルトの名無しさん [2008/07/12(土) 18:04:01 ]
System.IO.BinaryReaderで開いたファイルをシークさせるにはどうすればいいのだろう。
素直に考えるとhoge.BaseStream.Seek()なんだろうけど、msdnヘルプ見たら

注意:読み取り中または BinaryReader の使用中に基になるストリームを
使用すると、データの損失や破損の原因になることがあります。
たとえば、同じバイトが 2 回以上読み取られたり、バイトが読み
飛ばされたり、文字の読み取りが予期しない結果になることがあります。

って書いてあるからちょっと不安。

633 名前:デフォルトの名無しさん mailto:sage [2008/07/13(日) 07:49:32 ]
>>631
C++でも構造体の初期化にはmemset使うなって流れになってるけど、
配列はどうなんだろ。スレ違ですまそ。

634 名前:デフォルトの名無しさん mailto:sage [2008/07/13(日) 11:43:59 ]
>>632
シークが必要になったら、BinaryReaderは破棄して、元になったストリームをシークする。
んで、そのストリームから別のBinaryReaderを作って完了。

FileStream fs( "hogehoge", FileMode::Open);
BinaryReader br1( %fs);

// ここでbr1から好きなだけ読む

fs.Seek( 0, SeekOrigin::Begin);  // 先頭にシーク
BinaryReader br2( %fs);

// ここでbr2から飽きるまで読む


635 名前:デフォルトの名無しさん mailto:sage [2008/07/13(日) 11:45:13 ]
NetworkStreamのようにSeekできないのはどうすればいい?

636 名前:デフォルトの名無しさん mailto:sage [2008/07/13(日) 11:51:37 ]
メモリなりファイルなり一度どこかに蓄える

637 名前:デフォルトの名無しさん mailto:sage [2008/07/13(日) 11:55:10 ]
>>633
C++はプログラマの責任においてできることの範囲が広いわけで、
パフォーマンスや保守性など、各種要因を天秤に掛けて決めるべきかと。

C++/CLIは.NETの制限の中にあるんで、基本的にはmemsetは御法度なんだけど、
せめてArrayにFillメソッドがあってもいいような気もする。




638 名前:デフォルトの名無しさん mailto:sage [2008/07/13(日) 22:40:50 ]
>>633
ネイティブC++でも構造体の初期化にmemset非推奨ってーのは、
多分アライメントの関係で下手をすると尻切れになりかねないからだと思われ
例えば合計6バイトの構造体だと、実際のサイズは8バイトになると思うが
この構造体を配列にして初期化しようとすると、sizeofの実装によってはズレが生じかねない
ましてや.NETだと間に何が挟まってるか知れたもんじゃない
スレチだからこの辺で

639 名前:デフォルトの名無しさん mailto:sage [2008/07/13(日) 23:11:10 ]
「思われ」みたいなヲタク口調の奴って気持ち悪いな。
なんだよ「思われ」って。
想い想われかw

640 名前:デフォルトの名無しさん mailto:sage [2008/07/14(月) 01:11:15 ]
と、何にでも噛み付く狂犬がキャンキャン吠えてます

641 名前:デフォルトの名無しさん [2008/07/14(月) 13:28:50 ]
C言語の"%5d"に相当するToStringのフォーマット指定はなんて書くざますか?
"%05d"相当にしかならんのですが。

642 名前:デフォルトの名無しさん mailto:sage [2008/07/14(月) 14:03:06 ]
.PadLeft(5) つなぐとか

643 名前:デフォルトの名無しさん mailto:sage [2008/07/14(月) 14:05:40 ]
ググったらわかりました。
ToStringじゃできないのでString.Formatを使うらしい。
つか、MSDN分かりにくすぎだろ。

644 名前:デフォルトの名無しさん mailto:sage [2008/07/14(月) 21:14:15 ]
>MSDN分かりにくすぎだろ。
そういう感想の人もいるんだな。
いや別に煽ってる訳じゃなないし、たぶん俺が麻痺しちゃってるんだと思うけど
すくなくとも書式指定に関してはそういう不満は覚えなかったな。

だいたい>>641みたいな需要って(DOSの時代ならともかく)いまどきあまり
ない気がするよ。

645 名前:デフォルトの名無しさん mailto:sage [2008/07/15(火) 06:22:12 ]
WriteLineやStringFormatで使える書式
位置 ( , 桁数 ) : フォーマット
ToStringで使えるのはファーマットの部分だけ
漢字等の幅広文字も1文字で数えるから総桁数はあんまり使わないよね。

646 名前:デフォルトの名無しさん mailto:sage [2008/07/15(火) 09:44:50 ]
ToString().PadLeft(5) は無視か。

647 名前:デフォルトの名無しさん mailto:sage [2008/07/15(火) 19:46:28 ]
他に手がないならともかく、さすがにそれはなぁ。



648 名前:デフォルトの名無しさん mailto:sage [2008/07/20(日) 21:43:53 ]
すいません質問です。
StringのReplaceを大文字小文字を無視してすべて置換する方法はありませんかね?

649 名前:デフォルトの名無しさん mailto:sage [2008/07/20(日) 22:02:03 ]
ない

650 名前:デフォルトの名無しさん mailto:sage [2008/07/21(月) 20:11:57 ]
ないな…あってもいいと思ったんだが。
手抜くなら、Regex.Replace関連で代用かな…


651 名前:デフォルトの名無しさん [2008/07/22(火) 23:34:14 ]
セットアップウィザードを使ってインストーラーを作成しています。
ReadMe.txtのショートカットをプログラムメニューに配置したいのですが、アイコン関係がよく判りません。

手順としては、
アプリケーションフォルダにReadMe.txtを追加する。
ReadMe.txtのショートカットを作成する。
このショートカットをユーザーのプログラムメニューに配置する。
(プロパティはいじっていません。)


実際にインストールしてみると、問題なくReadMe.txtは表示されるのですが、アイコンが、%APPDATA%\Microsoft\Installer
\xxx.exeにあるアイコンが表示されます。

他のプログラムメニューに登録されているReadMeのように、txtファイルに関連付けられたアプリケーションの
アイコンが表示させたいのですが、どこをいじればよろしいでしょうか?
よろしくお願いします。





652 名前:デフォルトの名無しさん [2008/07/23(水) 15:10:07 ]
Microsoft.Office.Tools.ExcelとMicrosoft.Office.Interop.Excelの違いがよくわかりません。
それを知りたいのと、
単純にCUIでExcelファイル(.xls)を読み込んでバイナリデータにコンバートしたい場合、

どちらを使えばいいのでしょうか?


653 名前:デフォルトの名無しさん mailto:sage [2008/07/26(土) 17:55:38 ]
Visual Basic 2008 Express Editionをインストールして
新しくプロジェクトを作成してみると、以前までコードが自動生成されていたのが
生成されなくなってしまいました。

ex)
Public Class Form1

End Class

のような感じでしか出力されていない状態です。
何か設定を弄らないといけないのでしょうか?

654 名前:デフォルトの名無しさん mailto:sage [2008/07/26(土) 18:41:07 ]
>>653
今頃それに気づくということは以前というのはVS2002とか2003なのか?
プロジェクトのすべてのファイルを表示でForm1.Designer.vbが表示されるからそこにいろいろ入ってる。

Sub Newを書かないときにInitializeComponent()を誰が呼んでるのだという問題だったらまた話が違う。


655 名前:デフォルトの名無しさん mailto:sage [2008/07/26(土) 21:21:10 ]
>>654
以前に使用していたのは2005です。

問題の解決ができまして
原因は私の勘違いでボタンオブジェクト作成⇒自動挿入と思っていました。
ボタンオブジェクトでダブルクリックしないといけなかったという…
お答えくださりありがとうございました。


656 名前:デフォルトの名無しさん mailto:質問 [2008/08/09(土) 15:06:32 ]
質問です。
フォルダAppの中にBase.dllとModA.dllが存在しています。
このフォルダのdllはすべてVB.NET(1.1)で書かれており、
Base.dllの中には継承フォームの親クラスなど、
ModA.dllの中にはBase.dllを利用(参照)して作った実際の画面クラスなどがあります。

Base.dllは頻繁に更新されており、
ModA.dllの参照に設定されているバージョン番号よりもかなり新しい状態です。

現状、この内部だけの動作なら問題なく動いています。

現在、新しいWindowsアプリを作成中で、
C#で作ったアプリからModA.dll内の画面クラスを
System.Reflectionを使用して動的に呼び出したいのですが、
Base.dllを継承したフォームを呼び出そうとした瞬間に
「Base.dllが見つかりません。」というExceptionを投げられてしまいます。

・Base.dllとModA.dllは必ず同じAppフォルダに入っている
・Appフォルダそのものの位置は移動可能
・新アプリでは、Appフォルダの位置をユーザーに指定させる
・新アプリの位置も移動できる方が望ましい。

という条件で、上記のExceptionが出ないようにすることは可能でしょうか?
助言をお願い致します。

657 名前:デフォルトの名無しさん mailto:sage [2008/08/09(土) 19:36:19 ]
>>656
いろいろ書いてる割には見事にポイントをはずして要領を得ないね。
とりあえず言えることは、「出来るはず、やり方が悪い」



658 名前:656 mailto:質問 [2008/08/09(土) 20:31:55 ]
>>657
では、正しいやり方を教えてください。

659 名前:デフォルトの名無しさん mailto:sage [2008/08/09(土) 20:53:21 ]
それは657にエスパーであれっていってるのと同義だと思うけど

660 名前:デフォルトの名無しさん mailto:sage [2008/08/09(土) 20:57:54 ]
C#が1.1なのか他のバージョンなのか。
リフェレクションはAssembly.LoadFromを使っているのかそれとも別の方法か?
リフェレクションで読み込んで呼び出している部分のソースをさらす。
VBで同じ手法のリフレクションを使って実現できているのか。
「Base.dllが見つかりません。」じゃなくてスタックトレースを出せ。
E伊東さんとお知り合いか?

とりあえず、このくらいは書いとけよ。

661 名前:デフォルトの名無しさん mailto:sage [2008/08/09(土) 22:44:55 ]
リフェレクションえろいな

662 名前:デフォルトの名無しさん mailto:sage [2008/08/09(土) 22:47:14 ]
>>656
無理。
依存してるライブラリが更新されたらコンパイルしなおす必要がある。
さもなくば、動的にクラスを構成しないといかん。

663 名前:デフォルトの名無しさん mailto:sage [2008/08/09(土) 23:16:46 ]
厳密名を使ってるなら話は別だがPublicKeyToken=nullのときはVersionのチェックはない。


664 名前:デフォルトの名無しさん mailto:sage [2008/08/10(日) 20:55:34 ]
LoadFromが原因だろう。
厳密名とかの話じゃない。

LoadFromで読んだ場合、自動的に同じフォルダのBase.dllを
読んだりはしてくれない。
AssemblyResolveなどで自分でハンドリングして読み込むか、
事前にBase.dllもLoadFromで読んでおくことはできる。

でも、アプリのフォルダを自由に指定とかなってくると、
たぶんどっかでトラぶってにっちもさっちも行かなくなると思うぞ…


665 名前:デフォルトの名無しさん mailto:sage [2008/08/11(月) 19:50:24 ]
フォーム1で使っている変数(数字の1〜100)を
フォーム2にとばして使いたいのですが、どうすればいいのかわかりません。

自分で調べた所、プロパティを設定すればいいとのことでした。
ttp://homepage1.nifty.com/rucio/main/dotnet/shokyu/standard47.htm

ここを参考にして色々とやってみたのですが、
どうもうまく実際に使っているXの値を別のフォームに送れません。

どうか、ヒントをください。

666 名前:デフォルトの名無しさん mailto:sage [2008/08/11(月) 20:13:58 ]
[ヒント]
プログラミングに王道なし。

いやまじめな話、そのレベルから掲示板で解説しろってそりゃ無理あるぞ。

667 名前:656 mailto:質問 [2008/08/11(月) 22:59:52 ]
>>660
C#は1.1です。
try
{
 Assembly a;
 a = Assembly.LoadFile("C:\App\ModA.dll");
 foreach(Type type in a.GetTypes())
 {
  if(type == typeof(インターフェース))
  {
   return true;
  }
 }
}
catch(Exception e)
{
 MessageBox.Show("エラー発生");
}

ソースはこんな感じです。スタックトレースってのはよく分かりません。
ごめんなさい。

>>664
Base.dllを先に読み込めばいいんですね。
明日試してみます。



668 名前:デフォルトの名無しさん mailto:sage [2008/08/11(月) 23:05:34 ]
ってしかもLoadFileじゃねーかよ

669 名前:デフォルトの名無しさん mailto:sage [2008/08/11(月) 23:28:49 ]
>a = Assembly.LoadFile("C:\App\ModA.dll");

もしかして〜
a = Assembly.LoadFile(@"C:\App\ModA.dll"); 
とか
a = Assembly.LoadFile("C:\\App\\ModA.dll"); 
で直ったりして

670 名前:デフォルトの名無しさん mailto:sage [2008/08/11(月) 23:44:47 ]
まさかね
まあBase〜っていってるから違うと思うけど。

しかしなー、LoadFromやLoadFile系はトラブるんだよなー
できればフォルダを自由に指定ってのはやめた方が無難だけどなー


671 名前:デフォルトの名無しさん mailto:sage [2008/08/11(月) 23:50:07 ]
LoadFileはいろいろ制限が多いし、
LoadFromは署名がないと相対パスしかダメなんだっけ。
やっぱ構成ファイルを書きまくるとか。

672 名前:デフォルトの名無しさん mailto:sage [2008/08/12(火) 00:25:37 ]
MSDNから
>LoadFile は、LoadFrom メソッドとは異なり、ファイルを LoadFrom コンテキスト内には読み込みません。
>また、読み込みパスを使用して依存関係を解決することもできません。

ModA.dllのあるディレクトリから依存のあるBase.dllを探してくれない

673 名前:656 mailto:質問 [2008/08/12(火) 00:41:21 ]
>>669
書き込みミスです。@付きになってます。すみません。


LoadFromにすれば直るのでしょうか?
>>664の先に読み込むというのが気になるので、
それをまず試してみようと思います。

どちらにしても今すぐ確認はできませんので、
確認し次第再度書き込みます。

いろいろ助言をありがとうございます。

674 名前:デフォルトの名無しさん mailto:sage [2008/08/12(火) 00:45:38 ]
>>664はLoadFileの制限ぽい感じだな


675 名前:デフォルトの名無しさん mailto:sage [2008/08/12(火) 00:53:41 ]
C#でアプリ作ってるのですが、.NET Framework入ってない環境で起動した場合、
強制終了になる前に任意のメッセージ出して終了するにはどうすればよいでしょうか?


676 名前:デフォルトの名無しさん mailto:sage [2008/08/12(火) 08:07:28 ]
環境を調べるネイティブアプリ作って、入って無ければエラー出して終了、
入っていればC#アプリを起動するとか。

677 名前:デフォルトの名無しさん mailto:sage [2008/08/12(火) 13:27:53 ]
>>676
そのつもりでDOSスタブみたいな形で埋め込めればいいなぁと
あれこれ模索してたりしてたんですが、やっぱ分けるしかないでしょうか。



678 名前:デフォルトの名無しさん mailto:sage [2008/08/12(火) 14:33:44 ]
>>677
先頭のほうにmscoree.dll::_CorExeMainを呼ぶjmp命令があるから、
その飛び先を変えてやればいいと思う。

ちなみに、XP以降のWindowsローダーはマネージドアセンブリを読み込んだ場合、
このネイティブなスタブコードを実行せずに、_CorExeMainから直接実行し始める。

679 名前:678 mailto:sage [2008/08/12(火) 15:15:17 ]
何が言いたいのかよく分からない文章になってたけど、
要するにXP,Vistaあたりでは必要なバージョンのランタイムがないときに、
実行前に任意のメッセージを出すことはできない言うことです。

スタブコードを書き換えるのはやったことがないけど、そこに感染するウイルスがいくつかあるんで、
もしかしたらアンチウィルスソフトウェアに文句言われる可能性はあるかもしれないですね。

680 名前:656 mailto:sage [2008/08/13(水) 00:01:05 ]
LoadFromを使用して、先にBase.dllを読み込んでおけば
無事動くようになりました。

新たな問題はいくつか出てくるようになりましたが、
今のところ少しずつ解決していけてるので大丈夫だと思います。

丁寧な回答ありがとうございました。

681 名前:DD mailto:sage [2008/08/20(水) 13:29:19 ]
ASP.NET2.0のGridViewで質問があります。使用言語はC#です。
1つの画面に以下のコントロールがあります。
・TextBox (TextBox1)
・Button (Button1)
・GridView (GridView1)
・SqlDataSource (SqlDataSource1)
TextBox1に検索する主キーの値を入れ、Button1をクリックすると、
その主キーの行の背景色を変更する、といったことをやりたいと思っています。
GridView1のSelectedRowStyleのBackColorに適当な色を指定して
DataBoundイベントでGridView1.DataKeys[i].Valueをループで検索。
見つかったらGridView1.SelectedIndex = iとすることで
ほぼやりたいことは実現できています。

この状態でGridView1のAllowPagingをTrueに設定し、
Button1クリック時に、検索してヒットした行のあるページに
自動的に切り替えるにはどのようにすればよいのでしょうか?
現状のコードでは、現在のGridView1のページしか検索出来ないためうまく出来ません。
どなたかご教授願えないでしょうか?

682 名前:デフォルトの名無しさん mailto:sage [2008/08/22(金) 14:15:56 ]
>>681
PageIndexで表示したいページを設定できる

683 名前:デフォルトの名無しさん mailto:sage [2008/08/23(土) 09:19:12 ]
VC# 2005とWindows Forms(.Net Framework 2.0)でOfficeライクにお絵かきできるコントロールを探しています。

実はVisioのDrawing Control(ActiveXベース)がやりたいことを網羅しているのですが、
アプリケーションを動作させる全ての端末にVisioを入れなければいけないので
泣く泣くあきらめました。
www.c-sharpcorner.com/UploadFile/mgold/VisioInDotNet12032006222024PM/VisioInDotNet.aspx

実行環境が無料で何か良いコントロールをご存知の方は
お教え頂けますでしょうか。よろしくお願いします。

684 名前:デフォルトの名無しさん mailto:sage [2008/08/23(土) 22:54:37 ]
VC++2005EEとForm(.NET2.0)で作ったアプリを配布したいのですが
どのような配布形式が一般的でしょうか?
VS.net2003bootstrapper plug-inのようなものがあれば使いたいです。

685 名前:デフォルトの名無しさん mailto:sage [2008/08/24(日) 02:37:40 ]
.NET2.0はかなり普及してるし、そのままでも良いとは思う。

必要ならこの辺を参考に
ttp://dobon.net/vb/dotnet/deployment/dotnetbootstrap.html

686 名前:DD mailto:sage [2008/08/25(月) 18:12:57 ]
>>682
PageIndexで表示したいページを設定できることは分かっております。
問題なのは、DataBoundイベントでGridView1.DataKeys[i].Valueをループで検索した場合、
現在のPageIndex内のデータしか検索できないのです。
やりたいのは、全てのページを検索し、ヒットしたらそのページを表示することです。
DataBoundイベントではなく、何か別のイベントで検索する必要が
あるのではないかと思うのですが、
そのイベントが何なのかが分かりません。
どのようにしたら良いのでしょうか?

687 名前:デフォルトの名無しさん mailto:sage [2008/08/25(月) 22:01:53 ]
GridViewではなく、DataSource自体をぐるぐる回って調べていくとか。
泥臭いかw



688 名前:DD mailto:sage [2008/08/27(水) 13:39:15 ]
>>687
例えばDataSource自体をぐるぐる回って調べるとしたら、
どのイベントを捕まえればよいんでしょう?
実はそれをやろうとしてみたんですが、どのイベントで処理すればよいのか
分からなくて・・・。


689 名前:デフォルトの名無しさん mailto:sage [2008/08/27(水) 23:57:48 ]
一端DataViewに取って、後はそれ使えば?
常識的に考えて並びは一緒だから、現在のページ×1ページあたりの行数+indexで行けるハズ

690 名前:デフォルトの名無しさん mailto:sage [2008/08/28(木) 10:34:42 ]
>>687
泥臭いも何もそれが正しいやり方だと思うんだが。
>>688
イベントって、Button1のクリック以外に何があるん?
GridViewのDataSourceにセットしたものがDataTableオブジェクトだった場合、
Protected Sub GridView1_RowDataBound(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewRowEventArgs) Handles GridView1.RowDataBound
If e.Row.RowIndex = -1 Then Return
If e.Row.Cells(1).Text.Contains(Me.TextBox1.Text) Then
' 検索ワードが入っている行の背景を緑に
e.Row.BackColor = Drawing.Color.LightGreen
End If
End Sub

Protected Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim rIndex As Integer
Dim tbl As DataTable = CType(Me.GridView1.DataSource, DataTable)
For rIndex = 0 To tbl.Rows.Count - 1
If tbl.Rows(rIndex)(1).ToString().Contains(Me.TextBox1.Text) Then
' 検索ワードが見つかったらループから抜ける
Exit For
End If
Next
' ページインデックスを算出
Dim pIndex As Integer = rIndex \ Me.GridView1.PageSize
' GridViewに算出したページインデックスをセット
Me.GridView1.PageIndex = pIndex
' 適応実行
Me.DataBind()
End Sub

691 名前:DD mailto:sage [2008/08/28(木) 18:27:18 ]
>>689
一端DataViewに取る、その方法が分からないんです(T_T)
そこのところ、ご教授願えないでしょうか。

>>690
Dim tbl As DataTable = CType(Me.GridView1.DataSource, DataTable)
とありますが、当方C#なもので、よく意味が分かりません(^^ゞ
C#で書くと
DataTable tbl = (DataTable)GridView1.DataSource;
なのかな、と思って試してみましたが、GridView1.DataSourceがNULLでうまくいきませんでした。


692 名前:DD mailto:sage [2008/08/28(木) 18:42:28 ]
>>689
>>690
おかげさまで解決いたしました!
以下のコードでDataTableに取り出すことが出来ました。
DataView dv = (DataView)SqlDataSource1.Select(DataSourceSelectArguments.Empty);
DataTable table = dv.Table;
丁寧な解説、どうもありがとうございました。


693 名前:デフォルトの名無しさん mailto:sage [2008/09/01(月) 20:47:23 ]
C#で作ったプログラムからExcelを操作するプログラムを作りたいのですが、
Excelを操作する方法についてインターネットで調べてみると
どうやらExcelのバージョンによって参照設定するCOMってやつのバージョンが違うみたいです。

今作ってるプログラムをそのまま実家にメールで送って使ってもらう予定なのですが、
COMのバージョンが違うと正しく動かない可能性もあるのでしょうか?

使う予定の機能はExcelを読み込んで決まった位置に値を書き込むぐらいなんですが、
不具合を起こしにくいコツなどがあれば教えてください。

694 名前:デフォルトの名無しさん mailto:sage [2008/09/01(月) 21:33:36 ]
> 不具合を起こしにくいコツ
.NETでOfficeのCOMを利用しないというのが一番の対策じゃないかw
xlsファイルなどを直接操作できるライブラリを使うのがお勧め

695 名前:デフォルトの名無しさん mailto:sage [2008/09/01(月) 21:40:40 ]
>>694
すみません、できれば.NETを使用することを前提にお願いします。
COMって、自分で作ったdllみたいにReflectionで動的に探してきたりはできないんでしょうか?

696 名前:デフォルトの名無しさん mailto:sage [2008/09/01(月) 22:17:30 ]
それはできる。
でもメンバアクセスまで全部リフレクションでやる羽目になる。

悪いことは言わないからせめてVB.NETにしとけ。


697 名前:デフォルトの名無しさん mailto:sage [2008/09/01(月) 22:59:19 ]
>>696
ありがとうございます。
とりあえずGoogleってた結果、
Type.GetTypeFromProgID()というのを見つけたので実装はできそうです。

VBを1から勉強するかは後で考えるとして、
COMを動的参照するときって、普通はどういうクラスのどういうメソッドで参照先dllを探すのですか?

今までは自分で作ったdllを動的参照することしかしたことがなかった上、
インターフェースは静的に参照してそれを実装したクラスをReflectionで見に行く
ってことしかしたことがないので、COMの一般的な探し方を教えてくれませんか?

名前はともかくとして、COMのdllがある場所ってどうやって調べるんですか?



698 名前:デフォルトの名無しさん mailto:sage [2008/09/01(月) 23:11:05 ]
>>697
レジストリ(HKCR)を探せば見つかるが、プログラミング目的では普通やらない。
みんなProgIDとかClsIDとかで識別するから。

それに、DLLなら直接読み込んでオブジェクトを作ることも可能だが、
EXEに実装されているとどの道COMのAPIを介さないといけない。

699 名前:デフォルトの名無しさん mailto:sage [2008/09/02(火) 00:19:01 ]
>Type.GetTypeFromProgID()
を使うんだからおかしなことを考える必要はない。

問題は、インターフェイスを参照できないから、
メソッド呼び出しとかまですべてリフレクションでやらなきゃならないこと。


700 名前:DD mailto:sage [2008/09/02(火) 11:03:35 ]
>>697
とりあえず、VC#2005なら、ソリューションエクスプローラーの参照設定右クリックから
参照の追加。
COMタブを選択して、Microsoft Excel XX.X Object Library を選択して
OKボタンクリック。
これで一応使える。
COMオブジェクトは最後に必ず開放。こんな感じでどうでしょう。

/// <summary>
/// COM オブジェクトの参照カウントを解放する
/// </summary>
/// <param name="comobj">COMオブジェクト</param>
private void ReleaseComObject(Object comobj)
{
    // COMオブジェクトだったら
    if (comobj != null && System.Runtime.InteropServices.Marshal.IsComObject(comobj))
    {
        try
        {
            System.Runtime.InteropServices.Marshal.ReleaseComObject(comobj);
        }
        catch { }
        finally
        {
            comobj = null;
        }
    }
}



701 名前:デフォルトの名無しさん mailto:sage [2008/09/02(火) 12:14:10 ]
>>700
それだと複数バージョンのExcelに対応できないだろ>>693読め。

702 名前:DD mailto:sage [2008/09/02(火) 13:11:52 ]
>>701
あ、その通りですね(^^ゞ
以前Excelを扱った時はSpreadsheetGearを使ったので
COMを使った操作は良く分からないです。。。
サードパーティのライブラリを使用したくないとのことですので
これは使えませんね。
お役に立てずm(__)m

703 名前:デフォルトの名無しさん mailto:sage [2008/09/02(火) 15:25:27 ]
> comobj = null
意味ないじゃんw

704 名前:DD mailto:sage [2008/09/02(火) 15:26:49 ]
>>703
ですね(^^ゞ
はった後私もそう思いました。

705 名前:デフォルトの名無しさん mailto:sage [2008/09/02(火) 19:07:53 ]
>>701
バイナリになってしまえば問題ないんだよ。
「複数バージョンのExcelに対応できない」のはあくまで開発環境のみ。

一部バージョンが違うと例外が発生するメソッドがあったりするけど、
そこだけ個別に対応すれば問題ない。


706 名前:697 mailto:sage [2008/09/02(火) 21:11:51 ]
いろいろなご解答ありがとうございます。

今回は複雑なエクセル操作をするわけではないので、
すべてリフレクションでやるクラスを作って、それを使いまわそうと思います。
ありがとうございました。

707 名前:デフォルトの名無しさん mailto:sage [2008/09/02(火) 21:33:39 ]
VBでクラスライブラリ作った方が簡単だと思うけどな。



708 名前:デフォルトの名無しさん mailto:sage [2008/09/02(火) 23:26:51 ]
>>705
え?まじで?
うっそーん?


709 名前:デフォルトの名無しさん mailto:sage [2008/09/04(木) 20:20:35 ]
VBAではセルの文字列の色をCellsのCharactersで調べられるのですが
.NETではどうればいいのでしょうか?

msdnにはRangeにCharactersがあるのですが
書いてみると定義がありませんと
エラーがでます。
using Excel = Microsoft.Office.Interop.Excel;

var xls = new Excel.Application();
var book = xls.Workbooks.Open(略
var rng = (Excel.Range)book.sheet.Cells[1, 1];

こんな感じでRangeクラスを取得してます。
ちなみにVS2008SP1を使っています。

710 名前:DD mailto:sage [2008/09/08(月) 10:36:38 ]
>>709
rng.Font.Color
で取得できるのでは?

711 名前:709 mailto:sage [2008/09/08(月) 19:52:53 ]
>>710
すいません、質問の内容を微妙に間違えてました。
取得したいのは文字列のn番目の文字の色なんです。
Characters(4, 1).Font.ColorIndex
と書くとVBAでは4文字目の色の取得や設定が
出来るんです。

それだと多分セルに設定された文字列の色になるんですかね?

712 名前:デフォルトの名無しさん mailto:sage [2008/09/08(月) 21:09:12 ]
net導入するときはVB6を残したままでもいいですか?

713 名前:DD mailto:sage [2008/09/09(火) 11:55:55 ]
現在Visual Studio 2005 C#で以下のようなことを実現したいと考えております。
DropDownList(値にはIDが入っている)で選択した項目に一致するレコードをGridViewに表示する。
DropDownListにはALLという項目があり、これを選択すると
すべてのレコードを表示する。
このようなことをやりたいのですが、どうやったらいいのか分かりません。
現状ではALLを静的に追加しており、その値は0となっています。
また、GridViewのデータソースにSqlDataSourceを割り当て、
SqlDataSourceのSelectParameter(ID)にDropDownListの
SelectedValueを設定し、ALL以外の項目を選択した場合は
正常に動作しています。
どなたかご教授ください。

714 名前:DD mailto:sage [2008/09/09(火) 12:06:29 ]
自己解決しました。
bunise.seesaa.net/article/91995844.html
このページを参考にしてやってみてはいたのですが、なかなかうまくいかず
質問させていただきました。
結局は、SqlDatasourceのCanselSelectOnNullParameterをFalseにするのを
忘れていただけでした(^^ゞ
お騒がせいたしました。

715 名前:デフォルトの名無しさん mailto:sage [2008/09/09(火) 23:36:55 ]
.NET2005環境を利用しています。

Private Sub ShowMsgBox(ByVal PromptText As String, Optional ByVal Type As Integer = 0, _
Optional ByVal Title As String = "")
に対して、配列CmdArgsの1番目(0番目ではない)〜3番目の要素を
引数として渡したいのですが、2番目・3番目の要素は省略される可能性があります。

呼び出しについて例としてPerlで書くと、「$ShowMsgBox(CmdArgs[1..$#CmdArgs]);」のように
不定要素数の配列をインデックス1から最後まで指定して投げることが出来ますが、
VBではどのような形で呼び出せばいいでしょうか。

要素数を判別して、条件毎に呼びだし方を変更するしかないでしょうか。

716 名前:デフォルトの名無しさん mailto:sage [2008/09/09(火) 23:58:56 ]
>>715
ShowMsgBox(ParamArray args as Object())でも多重定義しとくとか。
まあどのみちその中で要素数を調べてToStringして別のシグネチャのShowMsgBoxを
呼び出すコードを書くわけで、同じといえば同じかもしれないけど。

っていうか趣味の問題かもしれんがOptionalは使わない方がいいんじゃないか?

717 名前:715 mailto:sage [2008/09/10(水) 00:20:30 ]
>>716
なるほど、即レスありがとうございます。

要素数判定で呼び出し方を返る、という形で書いてみましたが
かなり冗長な呼び出し方になってしまい、本末転倒な感じがしてきました。

If CmdArgs.Length > 3 Then
ShowMsgBox(CmdArgs(1), CmdArgs(2), CmdArgs(3))
ElseIf CmdArgs.Length > 2 Then
ShowMsgBox(CmdArgs(1), CmdArgs(2))
Else '←必ず0、1番目の要素は定義されている
ShowMsgBox(CmdArgs(1))
End If

ShowMsgBox側で配列としてまとめて受け取ってから、
処理した方が良さそうですね・・・。

>Optionalは使わない方がいいんじゃないか?
C感覚で勉強中だったので、多重定義が可能なことを忘れていました。
もう少し勉強してみます(`・ω・´)



718 名前:デフォルトの名無しさん mailto:sage [2008/09/10(水) 01:26:13 ]
ドレミファソラシドの周波数を算出するため、十二平均率
ja.wikipedia.org/wiki/%E5%B9%B3%E5%9D%87%E5%BE%8B#.E5.8D.81.E4.BA.8C.E5.B9.B3.E5.9D.87.E5.BE.8B
の周波数比を計算させたいのですが、ExcelのPOWER関数のような累乗根計算の方法はありませんか?

719 名前:デフォルトの名無しさん mailto:sage [2008/09/10(水) 01:36:09 ]
Math.Pow






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<234KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef