お酒好きのおしりトラブル対策とは

C#で、サーバーを作っています。
Readで読み込んで、次に、
Writeで、「ありがとうございました!!」など、
書き出しているのですが、
いままで、それなりに動いたいました。
しかし、クライアント側で、何も書き出さないと、
Read()の部分で、プログラム止まって(待機して)
しまっていることが分かりました。
クライアントが、何も書き出さないときは、
さっさと、「ありがとう・・」と書き出して、
終了したいのですが、30秒ほど待機して、
接続が切れてしまうようです(Writeもしない)。

Readは終端-1がくるまで、待機してしまうの
だと思います(文字が送られないときは、これが
ないので、待機してしまうのかな)。
例えば、送られてくるデータが、もともと無い、
ということを、あらかじめ認識し、
または、5秒くらいで、データが来なければ、
処理を次に移す、といった処理の仕方は、
できないでしょうか。
お願いします。

A 回答 (1件)

Readする前にNetworkStreamクラスのReadTimeoutを設定すれば、


たぶん0でリターンすると思います。

今回の場合、
xxx.ReadTimeout = 5000;
でいいと思います。(ミリ秒単位)

試してないのでわからないです。結果報告いただけるとありがたいです。
(たまに自分も今回のような問題に出くわすので)
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
お礼遅れてすいません(少し、忙しかったので)。
また、少し、PCをいじろうと思いますので、
この方法を、試してみます。
(ネットワークプログラムをやってきて、
この問題は、初めてなのが、不思議です)。
結果報告できたら良かったのですが、
プログラムには、体力がいるので、時間かかる
と思い、質問を閉じます。
どうもありがとうございました。
また、お願いします。

お礼日時:2006/04/12 23:06

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QVB2005 で NetworkStream で取得したデータのバイト数の取得方法について

VB2005 の初心者です。

System.Net.Sockets を利用して、Windows端末のAシステムとLinux端末のBシステムの通信部分のサービスを開発しています。

その際、NetworkStream で受信したデータのバイト数を取得したいのですが、やり方が分かりません。

データを取得している部分のソースは下記です。
10000バイトずつ取得していますが、
最後、10000バイトに満たない場合、取得したデータのバイト数が知りたいです。

Dim LNetworkStream As NetworkStream
Dim LbEndFlg  As Boolean
Dim LucData(10000) As Byte

Do While LbEndFlg
LNetworkStream = objClient.GetStream()

Redim LucData(10000)
LsLen = LNetworkStream.Read(LucData, 0, LucData.Length)

 LbEndFlg = FindEndOfClaim(LucData)
LstrText = System.Text.Encoding.UTF8.GetString(LucData, 0, LsLen)

MstrXML = MstrXML & LstrText

Loop


NetworkStream には、SetLength というメソッドがありますが、
これは必ず例外を発生させてしまうので、
例外を発生させずにバイト数を取得したいです。

何かヒントになることでも良いので、
皆様の知恵をお借りできれば幸いです。
よろしくお願い致します。

VB2005 の初心者です。

System.Net.Sockets を利用して、Windows端末のAシステムとLinux端末のBシステムの通信部分のサービスを開発しています。

その際、NetworkStream で受信したデータのバイト数を取得したいのですが、やり方が分かりません。

データを取得している部分のソースは下記です。
10000バイトずつ取得していますが、
最後、10000バイトに満たない場合、取得したデータのバイト数が知りたいです。

Dim LNetworkStream As NetworkStream
Dim LbEndFlg  As Boolean
Di...続きを読む

Aベストアンサー

追記。

>以下のように「自分で実装する必要」があります。

もちろん、自分で実装などせずに「ReadTimeoutプロパティに適切な値をセットし、DataAvailableプロパティがTrueだろうがFalseだろうが構わずにReadメソッドを呼び出し、Readメソッドが0以外を返した場合は処理を継続し、Readメソッドが0を返した場合はセッションが切れたかタイムアウトした時だからそこで強制終了する」と言う実装をした方が、遥かに簡単です。

QC#で通信処理。応答がない場合、すぐエラーにしたい

VS2005、C#で通信処理をしています。
やりたいことは「接続後、データを渡してその返答データをもらう」です。

//サーバーに接続
Int32 port = 9999;
TcpClient client = new TcpClient(server, port);

//サーバーにメッセージを送信
Byte[] dataA = System.Text.Encoding.UTF8.GetBytes(message);
Byte[] dataB = Byte[128];
NetworkStream stream = client.GetStream();
stream.Write(dataA, 0, dataA.Length);
len = stream.Read(dataB, 0, dataB.Length)

client.Close();

ネットのサンプルを参考にさせてもらい、上のようなソースを作ることができたのですが、2つの疑問があります。

(1)接続時に指定したIPアドレスが存在しない場合、エラーが返ってくるのが遅いです。そういうものなのでしょうか。たとえば、即時返答などはできないのでしょうか。
(2)接続してデータを送っても、向こうからデータが返ってこなければずっと待機したままです。たとえばミリセカンドで切ることはできないのでしょうか。
もしくは指定のミリセカンド経過後強制的にエラー処理に飛ばす等はできないのでしょうか。

通信処理をやるのが初めてで定石がよくわからず、あれこれ試している状態です。
処理についてご存じの方、ご指南いただけたらと思います。参考になるサイトや検索キーワードだけでも教えていただけたら嬉しいです。
よろしくお願いします。

VS2005、C#で通信処理をしています。
やりたいことは「接続後、データを渡してその返答データをもらう」です。

//サーバーに接続
Int32 port = 9999;
TcpClient client = new TcpClient(server, port);

//サーバーにメッセージを送信
Byte[] dataA = System.Text.Encoding.UTF8.GetBytes(message);
Byte[] dataB = Byte[128];
NetworkStream stream = client.GetStream();
stream.Write(dataA, 0, dataA.Length);
len = stream.Read(dataB, 0, dataB.Length)

client.Close();

ネットのサンプ...続きを読む

Aベストアンサー

C#は知らないのでアドバイスのみ。
この辺は使用しているクラスにそういう機能があるかどうか。
なければ、サーバのタイムアウトを待つしかない。
たとえば(2)であれば
TcpClient.SendTimeout プロパティを設定しとけば
Send メソッドが正常に完了する前にタイムアウトが発生した場合、TcpClient は SocketException をスローするらしいですよ。
詳細は参考URLのmsdn参照。

参考URL:http://msdn.microsoft.com/ja-jp/library/system.net.sockets.tcpclient.sendtimeout(VS.80).aspx

QCloseとDisposeの違い

みなさまこんばんわです。よろしくお願い申し上げます。

VB.NET 2008でコーディングしています。
CloseとDisposeの違いについて教えていただきたいのです。

これらのメソッドは、開いたファイルを閉じるときなどにも使いますが、今回お尋ねするのは、フォームを閉じるとき、しかも、自ら呼び出すとき(Me.Close() と、Me.Dispose() )のみに限ったこととしてお話しさせていただきます。

たとえば、ShowDialog() で呼び出したフォームは、そのフォーム内でMe.Close() しても、プロセスは残り、たとえば、タイマーコントロールのイベントに記述していますと、それは実行され続けます。

これを防ぐために、Me.Dispose() を使います。すると、きれいにプロセスは終了し、イベントは発生しない模様です。

そこで、「フォームを閉じる」意味のMe.Close() をすべてMe.Dispose() に変えてしまいました。確実にプロセスを破棄出来ると思ったからです。Webで調べると、違いは「再利用できる、できないの違い」という答えがありましたが、それはきっと、ファイルやオブジェクトのことで、フォームの場合は、再びShowまたはShowDialogで表示させることは可能でしたので、特に問題は感じていませんでした。

ところが、アプリケーション設定で、「最後のフォームを閉じるとき」にアプリケーションがシャットダウンする設定になってるのに、シャットダウンしてくれないことが起こりました。調べてみると、Me.Dispose() が原因。Me.Close() に変えるとうまくいきました。

わけわからなくなってきました。。。

ちなみに、その残ったフォームは、スタートアップフォームであり、別のフォームからShowまたはShowDialogメソッドで呼び出したものではありません。

ここで4つの仮説を立ててみました。

1. ShowDialogで呼び出したフォームは、Me.Dispose()、Showで呼び出した、あるいは、スタートアップフォームは、Me.Close() すれば破棄できる

2. ShowDialogで呼び出したフォームは、Me.Dispose()、スタートアップフォームは、Me.Close()、Showで呼び出したフォームは、どちらでも、破棄できる

3. 呼び出し方ではなく、別の要因が存在する

4. 併記する必要がある場合がある

Me.Close()
Me.Dispose()

または、

Me.Dispose()
Me.Close()



どれが正しいのでしょうか?どなたがご存じの方がいらっしゃいましたら、ご教授いただけませんでしょうか? どうぞよろしくお願い申し上げます。ありがとうございました。

みなさまこんばんわです。よろしくお願い申し上げます。

VB.NET 2008でコーディングしています。
CloseとDisposeの違いについて教えていただきたいのです。

これらのメソッドは、開いたファイルを閉じるときなどにも使いますが、今回お尋ねするのは、フォームを閉じるとき、しかも、自ら呼び出すとき(Me.Close() と、Me.Dispose() )のみに限ったこととしてお話しさせていただきます。

たとえば、ShowDialog() で呼び出したフォームは、そのフォーム内でMe.Close() しても、プロセスは残り、たとえば、...続きを読む

Aベストアンサー

Me.Close()
Me.Dispose()
は根本的に違うものです。

formについて、Close()メソッドはフォームの表示を終了させるメソッドです。

ほかのクラスも同様。すべてのDispose()メソッドについて、これはインスタンスの破棄を明示的に行うものです。

>再利用できる、できないの違い

Dispose()はインスタンスが破棄されるため、再びコンストラクタを用いて、インスタンスを生成しないいけません。

一方Close()はインスタンスが残っているので、それを利用することができます。

>1. ところが、アプリケーション設定で、「最後のフォームを閉じるとき」にアプリケーションがシャットダウンする設定になってるのに、シャットダウンしてくれないことが起こりました。調べてみると、Me.Dispose() が原因。
Me.Close() に変えるとうまくいきました。

通常はどちらでもうまくいきます。

>2. ShowDialogで呼び出したフォームは、Me.Dispose()、スタートアップフォームは、Me.Close()、Showで呼び出したフォームは、どちらでも、破棄できる

ShowDialogの場合は、メソッド内部で、ハンドルが破棄されているため、Close()メソッドの際にDispose()メソッドが呼び出されます。

>3. 呼び出し方ではなく、別の要因が存在する

そう思います。

>4. 併記する必要がある場合がある

インスタンスを明示的に破棄したほうがよい場合は多く存在します。
Disposeが使えるメンバはIDisposableをインターフェースとして持っているメンバです。
これらのメンバは、外部とのやり取りを行うものが多くあります。
たとえばSQLClientに含まれるようなメンバです。

外部とのコネクションを確実に破棄を保障してほしいなどという場合がありますよね、このようなときに使用します。

Using構文を使用するのとまったく同じ理由になります。
正確にはUsing構文を使用できるメンバには条件があります、IDisposableをインターフェースとして持っているメンバに限るというものです。

ほかにもガーベージコレクタによるファイナライズを伴うかどうかという違いがあります。
Disposeの場合はファイナライズが同時に行われるため、使用していたメモリ空間を開放することができます。

上記のような理由により、
Me.Close()
Me.Dispose()
は両方書いたほうがよいと思います。

蛇足ですが、
Me.Dispose()
Me.Close()
はエラーになります。
Me.Dispose()により、Me本体(インスタンス)は削除されてしまいます。
存在しないMeに対してCloseメソッドを要求することはできないためです。

Me.Close()
Me.Dispose()
は根本的に違うものです。

formについて、Close()メソッドはフォームの表示を終了させるメソッドです。

ほかのクラスも同様。すべてのDispose()メソッドについて、これはインスタンスの破棄を明示的に行うものです。

>再利用できる、できないの違い

Dispose()はインスタンスが破棄されるため、再びコンストラクタを用いて、インスタンスを生成しないいけません。

一方Close()はインスタンスが残っているので、それを利用することができます。

>1. ところが、アプリ...続きを読む

QC#で共有変数の定義をするには

C#で共有変数の定義をするには、どうしたらよいでしょうか。具体的には、起動パラメータで、任意の文字列(3~4バイト)を渡して、C#アプリケーションを、起動し、プログラムの任意の場所で、そのパラメータを参照したいと考えています。起動パラメータの受け取りは、できるのですが、そのパラメータを、プログラムのどこからも参照できる領域(ここの定義方法が不明)に格納するには、どうしたらよいでしょうか。(2重起動を許す前提です。実行時に1つの目のプログラムにはパラメータ"XYZ"を渡し、2つ目のプログラムを起動時にはパラメータ"ABCD"を渡し、その値により、プログラムの動作を制御したいと思っています)
Windows-xp visual-studio2008 C#でwindowsアプリケーションを作成しています。

Aベストアンサー

namespace test1
{
  static class Program
  {
    /// <summary>
    /// アプリケーションのメイン エントリ ポイントです。
    /// </summary>
    [STAThread]
    static void Main(string[] args)
    {
      if (args.Length > 0)
      {
        strArg = args[0];
      }
      Application.EnableVisualStyles();
      Application.SetCompatibleTextRenderingDefault(false);
      Application.Run(new Form1());
    }
    // ここに記述
    static public string strArg = null;
  }
}

メインクラスのメンバーとしてスコープが有効な場所に記述します

namespace test1
{
  static class Program
  {
    /// <summary>
    /// アプリケーションのメイン エントリ ポイントです。
    /// </summary>
    [STAThread]
    static void Main(string[] args)
    {
      if (args.Length > 0)
      {
        strArg = args[0];
      }
      Application.EnableVisualStyles();
      Application.SetCompatibleTextRenderingDefault(false);
      Application.Run(n...続きを読む

Qc# ネットワークプログラム

c#でネットワークプログラムを作る際、
SocketクラスとTcpListener・TcpClientクラスのどちらで
作るのが良いのでしょうか。

やりたいことは、サーバーとクライアントを接続して送受信させるだけです。

Aベストアンサー

No.1です。

回答続編です。
とはいえ、こちらも難航中ですが。
(何となくTCP-Clientは判ってきたかなという感じですね)


>1秒間隔でポーリングして受信がある場合は受信を送信処理が
>ある場合は送信処理を1つのコネクションでさせる場合は
>どうすればいいのでしょうか。(c言語のselect関数相当)

…確か、Socketの方にはSelectを持っていた気がします。
 調べてみてください。
 しかし、一般的にポートは6万個しかありませんので。
 大規模なアクセスをも想定する場合は、1メソッドでポイと
 捨ててみてもいいような気もします。
 でないとポートが利用人数分消費されます。
 TCP/IPはどうも、永続的なセッション情報を元来あまり保証し
 なさそうな雰囲気ですので、(FrameworkのTCP-Clientは
 低レイヤーの切断情報などステータスをうまく取れない模様。)
 きっと[Data.Length][Separetor][Data] というような、
 RS-232Cのようなベタな「俺プロトコル」を適当につくり、
 TimeOutベースで審査&そのたびにスレッドを捨てるという
 やりかたでもいいんじゃないかなとも思えます。

>また、お勧めのサイトとかありましたら教えてください。
 当方の情報源は。
 1.VS2008のMSDN(ネットのは古い場合がある)
 2.C#500の技とかいう書籍
 3.海外のWebサイト
 ですね。
 日本は情報があまり見当たりません。
 Code Projectというサイトあたりを中心に物色しています。

私は、ClickOnceでTCP-Clientを配布して使えないかなという
実験中で。今日のところは、HTTPサーバとおしゃべりできた程度
です…

No.1です。

回答続編です。
とはいえ、こちらも難航中ですが。
(何となくTCP-Clientは判ってきたかなという感じですね)


>1秒間隔でポーリングして受信がある場合は受信を送信処理が
>ある場合は送信処理を1つのコネクションでさせる場合は
>どうすればいいのでしょうか。(c言語のselect関数相当)

…確か、Socketの方にはSelectを持っていた気がします。
 調べてみてください。
 しかし、一般的にポートは6万個しかありませんので。
 大規模なアクセスをも想定する場合は、1メソッドで...続きを読む

QC#にて別クラスの関数を使いたい

C#にて、別クラスの関数を使用する方法を教えてほしいです。

下記のような、構造体を受け取るメソッドを作りました。

*****************************
private struct MyPoint
{
public int x;
public int y;
}

private void proc1(MyPoint pt)
{
MessageBox.Show("座標:" ; pt.x + "," + pt.y + "実行結果");
}

private void button1_Click(object sender ,System.EventArgs e)
{

MyPoint pt;
pt.x = 10;
pt.y = 20;
proc(pt);
}
*****************************

別のフォームのクラスから、proc1を呼び出したいのですが、やり方がわかりません。
どうか、教えてください。

Aベストアンサー

同じ定義をしたとしても別の名前空間に書いた構造体は同一とはみなされません。

呼び出し先クラスでの構造体を private では無く、public で宣言して下さい。

呼び出し元では、

MyClass.MyPoint pt;

のようにして実体を作ります。

Q同じソリューション内の別のプロジェクトのメソッド呼び出し

同じソリューション内の別のプロジェクトのメソッド呼び出し

お世話になっております。
Visual Studio でC#で開発をしております。
初心者です。

同じソリューション内にある別のプロジェクトのメソッドを呼び出す方法は
どの様にしたら宜しいのでしょうか。
下記の様に記述しましたら、
「静的でないフィールド、メソッド、またはプロパティ ~省略~ で、
 オブジェクト参照が必要です」と言うエラーが出てしまいます。
何か根本的に間違っているのかも知れません。

何卒、ご教授頂きたく宜しくお願い致します。

        記

呼び出し側
private void button1_Click(object sender, EventArgs e)

  呼び出し先のプロジェクト名.クラス名.メソッド名();
 }


呼び出される側
namespace プロジェクト名

public class クラス名

   メソッド名()
   {
     処理内容
    }
  }
 }

Aベストアンサー

ソリューション エクスプローラにおいて、呼び出し側のプロジェクト ツリーの「参照設定」を右クリックして、「参照の追加」を実行、ダイアログの「プロジェクト」タブにおいて、呼び出される側のプロジェクトを選択してOKを押してください。
Visual C#のインテリセンスが正常に機能し始めれば設定が成功しています。

なお、参照設定の追加により、参照されるアセンブリは参照するプロジェクトの出力フォルダに自動的にコピーされるようになります。
また、被参照アセンブリのプログラム デバッグ データベース ファイル(.pdb)も自動的にコピーされるので、被参照側のソースにブレークポイントを置いて参照側でデバッグを開始すると、きちんとブレークポイントで停止してくれます。

QC# ソケット通信でデータ受信時の欠損について

Visualstudio 2013 を使用して C# で開発を行っています。

Socket Classを使用してデータの送受信をするプログラムを作成しているのですが、
非同期でデータを受信する際に取りこぼしなくデータを受信させる方法で悩んでいます。

現在行っているのは、
 socket.BeginReceiveでデータ受信時のコールバック関数を登録し受信開始。

 データ受信時のコールバック関数の中で
 len = socket.EndReceive(ar);
 byte[] rcvBuff = (byte[])ar.AsyncState;
 でデータとサイズを取得

 再度socket.BeginReceiveで受信開始。

としています。

悩んでいるのは EndReceive から、二回目のBeginReceiveまでの間に送られたデータを取りこぼしてしまうのではないかということです。


認識として間違っていたら指摘頂きたいです。
また、別の方法で非同期で取りこぼしなく受信できるやり方が有りましたらヒントでもよいので教えていただけたらと思います。

よろしくお願いします。

Visualstudio 2013 を使用して C# で開発を行っています。

Socket Classを使用してデータの送受信をするプログラムを作成しているのですが、
非同期でデータを受信する際に取りこぼしなくデータを受信させる方法で悩んでいます。

現在行っているのは、
 socket.BeginReceiveでデータ受信時のコールバック関数を登録し受信開始。

 データ受信時のコールバック関数の中で
 len = socket.EndReceive(ar);
 byte[] rcvBuff = (byte[])ar.AsyncState;
 でデータとサイズを取得

 再度socket.BeginReceiveで受...続きを読む

Aベストアンサー

> 悩んでいるのは EndReceive から、
> 二回目のBeginReceiveまでの間に送られたデータを取りこぼしてしまうのではないかということです。
大丈夫よん。

プログラムがBeginReceive~EndReceiveでひとかたまりの受信データブロックを取得するのはあくまで「同じコンピューターのOSから」なので、その時「同じコンピューターのOS」は相手からのデータ送信をどんどこどんどこ受け付けている。
そもそも最初のBeginReceiveをしなくてもコネクションが確立された瞬間からOSは相手からデータを受け取っているのだ。

これは、次のようなイメージだ。
(1)あなたは一階に総合受付がある雑居ビルで仕事をしてる。(あなた=プログラム、総合受付=NIC)
(2)一階の総合受付の中にあなた宛の郵便受けを置いたとする。(Socket#Listen、Socket#Accept)
(3)郵便屋さんはそこにあなた宛の郵便をどんどこどんどこ持ってくる。
(4)あなたは部下に「郵便受けに何かないか見てこい。何もなかったら何か来るまでそこで見張ってろ。郵便が有ったら報告せよ。」という。(BeginReceive)
(5)部下は降りていった時に郵便があればそのまま持って上がる。無ければ来るまで待つ。(コールバック)
(6)あなたは部下から郵便を受け取って再び(4)を命じる。(EndReceive、AsyncState、BeginReceive)

ここで、(3)と(4)~(6)は非同期にかつ独立して行われる。あなたや部下が郵便を取りに行こうが取りにいくまいが郵便屋さんは郵便を持ってきて便受けに入れるだけだ。具体的には(6)でEndReceiveとBegenReceiveの間に郵便屋さんが来たとしてもそれは便受けに郵便を入れるだけだ。
もちろん、あなたのプログラムが終了しようとしている時に郵便受けに溜まってるのにあなたが読まなかった郵便はプログラム終了(というかSocket#Close)とともにロストする。
TCPはこの郵便受けがぱんぱんになってしまったら郵便屋さん(というか郵便を送りつけてくる相手)にちょっと待って貰うとかそういう制御もしている。

イメージ的にはこんなイメージであなたはBeginReceiveとEndReceiveを実行するタイミングによる伝送データロストを気にする必要はない。もし本当にそんなちょっとしたタイミングの差でそんな事が起こるんならMicrosoftさんだってそんなコンポーネント作らんじゃろ。

> 悩んでいるのは EndReceive から、
> 二回目のBeginReceiveまでの間に送られたデータを取りこぼしてしまうのではないかということです。
大丈夫よん。

プログラムがBeginReceive~EndReceiveでひとかたまりの受信データブロックを取得するのはあくまで「同じコンピューターのOSから」なので、その時「同じコンピューターのOS」は相手からのデータ送信をどんどこどんどこ受け付けている。
そもそも最初のBeginReceiveをしなくてもコネクションが確立された瞬間からOSは相手からデータを受け取っているのだ。

こ...続きを読む

QC# ReadOnlyのTextBoxで

お世話になります。

C#でテキストボックスを、ReadOnlyで配置する際、
フォーカスが移るとカーソル(キャレット)が表示されてしまいます。

過去ログなどで調べた結果、WindowsAPIを使うしかないと
過去の情報にはあったのですが、この問題は.Netの最新の
4.5(?)現在でも、それに見合ったメソッドは実装されていませんか?

今でもまだ、APIを使用しなければ駄目でしょうか。

よろしくお願いします。

Aベストアンサー

されていません。
無効であることと意味が異なりますので。

大体日本だと、こういうのがありますよね。
 ・Enabled=falseでいいじゃん
  ⇒背景色、文字色が濃くなって、見辛いのでNG

 ・ReadOnly=true、TabStop=falseでいいじゃん
  ⇒背景色変わってほしくない、マウスでフォーカスがあたるのでNG

 ・ラベルで表現すればいいじゃん
  ⇒情報のコピーを行うことができなくなるのでNG

よほど神経質でない限り、どちらかでいいのでしょうが、いちいちどうでもいい細かいところに
拘りたがります。
そういうの、ある特定条件下において入力可能/不可能が切り替わる時に、大変拘りだすと
思います。


結論は自作するしかありません。

WindowsAPIで実現する方法論は知りませんでしたが、私はOnReadOnlyChangedをオーバーライドして
コンポーネントを自作しましたよ。
加えて、ReadOnlyFocusApplyプロパティみたいなのを作って、trueならただのReadOnly状態、
falseならラベルで表現する、とかってしました。

先に記した状態3つがあるわけですが、ユーザーがどのレベルまで求めているのかによって
対応策が異なると思います。
⇒フォーカスが遷移しないのにWindowsの基本操作に従った手順でコピーは行いたいなんてのは
 ムリなので。

されていません。
無効であることと意味が異なりますので。

大体日本だと、こういうのがありますよね。
 ・Enabled=falseでいいじゃん
  ⇒背景色、文字色が濃くなって、見辛いのでNG

 ・ReadOnly=true、TabStop=falseでいいじゃん
  ⇒背景色変わってほしくない、マウスでフォーカスがあたるのでNG

 ・ラベルで表現すればいいじゃん
  ⇒情報のコピーを行うことができなくなるのでNG

よほど神経質でない限り、どちらかでいいのでしょうが、いちいちどうでもいい細かいところに
拘りたがります。
そうい...続きを読む

Qフルパスから最後のディレクトリ名を取得したい。

vb.netなのですが、例えば
c:\aaa\bbb\ccc\ddd\eee\fff.exe
というフルパスがあったとして、
eeeというディレクトリ名を取得したいのですが、
何か良い方法はないでしょうか。
それぞれのディレクトリ名の文字数や階層数は
決まっていないのですが、オススメの方法が
ありましたら、教えて頂けると助かります。

Aベストアンサー

MessageBox.Show(IO.Path.GetFileName(IO.Path.GetDirectoryName(myPath)))

IO.Path の GetDirectoryName でフォルダのフルパスを取得して、さらに IO.Path の GetFileName で最終フォルダ(またはファイル)の名前を取得。


人気Q&Aランキング

おすすめ情報