C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

ログ内検索
  • キーワードを複数指定する場合は 半角スペース で区切ってください。
  • 検索条件は、(AND)=[A かつ B] (OR)=[A または B] となっています。
  • [返信]をクリックすると返信ページへ移動します。
キーワード/ 検索条件 /
検索範囲/ 強調表示/ ON (自動リンクOFF)
結果表示件数/ 記事No検索/ ON
大文字と小文字を区別する

全過去ログを検索

<< 0 >>
■11052  Re[6]: 文字の改行
□投稿者/ mあ@反省中 -(2007/12/06(Thu) 01:08:35)

    入力中のやつが全部消えた・・・

    CSVファイルフォーマット上不適切な文字コードは全て置換する。
    CSVで禁止ワードは、"," と "\n" です。

    エンコード:接頭辞を "%" としたとき、
    (1)文字列中の "%" を "%%" に置換する。
    (2)文字列中の "\n" を "%R" に置換する。
    (3)文字列中の "," を "%C" に置換する。

    デコード:
    上記の逆の順序で。

    名前:%きも%
    内容:きもは、
    とても、
    きもい,けど・・・。


    上記入力をエンコードルールに則り置換すると、
    名前:%%きも%%
    内容:きもは、%Rとても、%Rきもい%Cけど・・・。%R

    となる。
    これを、bbs.txt に書き込むと、

    bbs.txt の内容は、
    %%きも%%,きもは、%Rとても、%Rきもい%Cけど・・・。%R

    となる。

    あとは分かるでしょ?



記事No.10994 のレス /過去ログ24より / 関連記事表示
削除チェック/

■36191  Re[6]: ファーム切替え時のチラツキ(スムーズな画面切替)
□投稿者/ もっさ -(2009/05/23(Sat) 22:58:11)
    No36181 (biac さん) に返信
    >>Form1からForm2が表示されるときは、スムーズに表示されるのですが、Form2からForm3を表示するときに、後にあるForm1まで
    >>が一瞬消えてから、Form3が表示される状態です。
    >
    > Form2 を閉じるときに Form1 へ制御が返っていないので、 Form1 が自分を描画できないのでは?
    >
    > 普通は…
    > private void button1_Click(object sender, System.EventArgs e)
    > {
    >  Form2 nF = new Form2();
    >  nF.ShowDialog(); //Form2をモーダルとして表示
    >
    >  DoEvents();
    >
    >  Form3 mF = new Form3();
    >  mF.ShowDialog(); //Form3をモーダルとして表示
    > }
    > …みたいに書きますよね?
    >

    アドバイスありがとうございます。
    以下のように、Form3 mF = new Form3(); の前にDoEvents()を入れましたが、変化はありませんでした

    private void button1_Click(object sender, System.EventArgs e)  //フォーム中のボタンが押されたとき
    {
     Form2 nF = new Form2();
     nF.Disposed +=new EventHandler(nF_Disposed); //Disposeイベントを登録
     nF.ShowDialog(); //Form2をモーダルとして表示
    }
    //Form2のDispseイベントでForm3を表示
    private void nF_Disposed(object sender, EventArgs e)
    {
      System.Windows.Forms.Application.DoEvents();
      Form3 mF = new Form3();
      mF.Disposed +=new EventHandler(mF_Disposed); //Disposeイベントを登録
      mF.ShowDialog(); //Form3をモーダルとして表示
    }
記事No.36163 のレス /過去ログ63より / 関連記事表示
削除チェック/

■83810  Re[1]: メモリの使用量は?
□投稿者/ shu -(2017/04/11(Tue) 09:35:16)
    No83801 (ねこちょっぷ さん) に返信
    > ただコンテキストメニュー作るだけのプログラムなんですがタスクマネージャで見ると270MBも食ってたりします
    > アイコンをImageListにしてるのでそれが食ってるのかな?と思うのですが、実際にどのオブジェクトがどの位食ってるのか調べる方法はありますでしょうか?

    検討がついているならプロジェクト全体をコピーしてImageListを削除してみればよいのではないでしょうか?
記事No.83801 のレス /過去ログ143より / 関連記事表示
削除チェック/

■85089  Re[1]: 文字列を数値に高速で変換する方法
□投稿者/ 魔界の仮面弁士 -(2017/09/11(Mon) 11:15:54)
    No85086 (ANA さん) に返信
    > そのため、何かの関数のラッパーになっているのではないかと思います。
    すべて何某かのラッパーではあるので、どこまでを指しているのかにもよりますが:

    > Dim Num as Single = CSng("3.345235235235534543634") '14.3秒
    > CType("3.345235235235534543634", Single) '14.1秒
    コンパイル後は、CSng(s) と CType(s, Single) は完全に等価ですので、
    この 0.2 秒の差は測定誤差ということになりますね。


    > Single.Parse("3.345235235235534543634") '2.0秒
    > Convert.ToSingle("3.345235235235534543634") '2.0秒
    この 2 つは別のメソッド呼び出しとしてコンパイルされますが、
    処理速度が変わらないのは、どちらも内部的には
     If value Is Nothing Then
      Return 0.0F
     Else
      Return Single.Parse(value, CultureInfo.CurrentCulture)
     End If
    に相当する同一の手順で処理されるためです。


    一応、呼び出し回数を軽減させるために、
     Dim ci As CultureInfo = CultureInfo.CurrentCulture
     Dim ns As NumberStyles = NumberStyles.AllowLeadingWhite Or NumberStyles.AllowTrailingWhite Or NumberStyles.AllowLeadingSign Or NumberStyles.AllowDecimalPoint Or NumberStyles.AllowThousands Or NumberStyles.AllowExponent
     For n = 1 To 繰り返し回数
      Dim Num As Single = Single.Parse("3.345235235235534543634", ns, ci)
     Next
    とすることはできます。もっとも、軽減したとしても、微々たる差でしょうから、
    可読性を落としてまで実装する価値は無さそうですけれども。


    > Dim Num as Single = CSng("3.345235235235534543634") '14.3秒
    > Dim Num as Single = CSng(Val("3.345235235235534543634")) '1.4秒

    CSng は「現在のカルチャー」に応じてその振る舞いを変化させますが、
    Val はカルチャーを考慮せず、常に同じ動作になります。
    そのため、Val を使った方が処理効率が早くなっています。

    しかも後者の場合、実際には「VB の CSng 関数」が呼ばれることはありません。
    Val 関数の戻り値が Double 型ということで、後者は VB の CSng ではなく、
    直接「MSIL の 0x6b 命令」すなわち「conv.r4」に渡される形にコンパイルされます。


    しかしながら、Double 型をいったん経由することになる以上は、
    必ずしも、両者の結果が同一になるとは限りません。
    たとえば "-4.4E+38" という文字列を処理した場合、
    前者は OverflowException を発生させますが、
    後者は Single.NegativeInfinity な値として格納されます。


    > このVal関数というのは、VB6以前の古いフォーマットだと思います。
    > VB.NETの方法を使ったもっと美しいコードがあれば教えてください。

    個人的には、Val の利用を否定はしないですけれどね。
    Microsoft.VisualBasic.Compatibility.VB6 名前空間に
    所属しているわけでもないですし、今回のように
    明確な意図があって使っているのならなおのこと。
    # 意図的に Val を選択したことについては、コメント等で触れておいて欲しいですが。

    ちなみに、
     ・Val では、小数点記号として "." しか認めない。CSng や Single.Parse はカルチャーを考慮する。
     ・Val("123D-2") は 1.23 を返すが、CSng("123D-2") や Single.Parse("123D-2") は例外を発する。
     ・全角の "(123)"を渡すと、Val は 0.0 を返し、CSngは -123.0 を返し、Single.Parse は例外を発する。
    などの違いがあります。



    > Dim Num as Single = CSng("3.345235235235534543634") '14.3秒
    本題からは外れますが、そもそも Single 型で、
    "3.3452352…" な値をとることはなかったりします。

    3.345235235235534543634 を指定しても、内部値的には
    3.3452353477478027343750 相当の値にしかならないためです。

    ちなみに Single 精度では、下記のような非連続の近似値として格納されます。
     0b01000000010101100001100001010100 → 3.3452348709106445312500 相当(3.34523487)
     0b01000000010101100001100001010101 → 3.3452351093292236328125 相当(3.345235)
     0b01000000010101100001100001010110 → 3.3452353477478027343750 相当(3.34523535)
     0b01000000010101100001100001010111 → 3.3452355861663818359375 相当(3.34523559)
     0b01000000010101100001100001011000 → 3.3452358245849609375000 相当(3.34523582)

    ※左がバイナリ表現(二進小数化する前の値)、右が十進小数化後の値とラウンドトリップ表現。
記事No.85086 のレス /過去ログ145より / 関連記事表示
削除チェック/

■87091  Re[1]: datagridviewからxmlへの出力について
□投稿者/ WebSurfer -(2018/04/11(Wed) 12:58:41)
    No87059 (kaz さん) に返信
    
    <追伸>
    
    > 【質問2】
    > datagridviewにチェックボックスが配置されていて
    > チェックをつけたセルについては、
    > <checked>true</checked>
    > と出力されるのですが
    > チェックがついていないセルについては
    > 【質問1】の状況と似たように
    > 項目自体が出力されません
    
    こちらは自分が試した限りでは再現できませんでした。
    
    DataGridView 上でのチェックボックスのチェックの有無と xml ファイルの true / false は
    きちんと期待通りに対応します。
    
    どのように試したかと言うと、以下の通りです。質問者さんのケースとどこが違うかチェック
    してみてください。
    
    (1) SQL Server の Microsoft のサンプルデータベースの Northwind の Products テーブルか
      ら以下のクエリを使ってインラインスキーマ付きの xml を生成。
    use NORTHWIND
    go
    select top 5 * from Products FOR XML raw('product'),
       root('root'), elements, XMLSCHEMA('MyURI')
    
    	UserInfo.xml という名
      前を付けて xml ファイルとして保存。
    
    (2) Visual Studio で Windows Forms アプリのプロジェクトを作成。それに、上記 (1) の手順
      で作った xml を UserInfo.xml という名前を付けて保存。
    
    (3) Windows Forms アプリに以下のクラスファイル(ビジネスロジック)を追加。
    
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using System.Data;
    
    namespace EditXmlFileOnDataGridView
    {
        public class UserInfoTable : IDisposable
        {
            const string filePath = @"C:\Users\...\UserInfo.xml";
            private DataSet myDataSet;
    
            public UserInfoTable()
            {
                myDataSet = new DataSet();
                myDataSet.Locale = System.Globalization.CultureInfo.InvariantCulture;
                myDataSet.ReadXml(filePath, XmlReadMode.ReadSchema);
            }
    
            public virtual void Dispose(bool disposing)
            {
                if (disposing)
                {
                    myDataSet.Dispose();
                }
            }
    
            public void Dispose()
            {
                Dispose(true);
                System.GC.SuppressFinalize(this);
            }
    
            ~UserInfoTable()
            {
                Dispose(false);
            }
    
            public DataSet GetDataSet()
            {
                return myDataSet;
            }
    
            // ・・・中略・・・
    
            public void Save()
            {
                myDataSet.WriteXml(filePath, XmlWriteMode.WriteSchema);
            }
        }
    }
    
    (4) 自動生成されている Form1 にデザイン画面で DataGridView, Button を貼り付け。
      以下のコードを書く。
    
    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using System.Windows.Forms;
    
    namespace EditXmlFileOnDataGridView
    {
        public partial class Form1 : Form
        {
            private BindingSource bindingSource1 = new BindingSource();
            private UserInfoTable userInfo;
    
            public Form1()
            {
                InitializeComponent();
                this.userInfo = new UserInfoTable();
                DataTable table = userInfo.GetDataSet().Tables[0];
                table.AcceptChanges();
                this.bindingSource1.DataSource = table;
                this.dataGridView1.DataSource = bindingSource1;
            }
    
            private void button1_Click(object sender, EventArgs e)
            {
                this.bindingSource1.EndEdit();
                this.userInfo.Save();
                this.userInfo.GetDataSet().Tables[0].AcceptChanges();
            }
        }
    }
記事No.87059 のレス /過去ログ149より / 関連記事表示
削除チェック/

■87102  Re[2]: datagridviewからxmlへの出力について
□投稿者/ kaz -(2018/04/11(Wed) 22:09:05)
    その後、色々試してみて
    まだ部分的に切り出した実験コードレベルですが
    質問で意図した動作はほぼ達成出来たと思われます
    
    ・型付データセットを作成
    ・必要な列を追加
    ・DefaultValueをString列はString.Empty、Boolean列はfalseに設定・・・(※1)
    ・スキーマを含めずWriteXmlで書き出す前に以下のようにDBNullを空文字やfalseに置換・・・(※2)
    
    
                for (int i = 0; i <= ds.Tables[0].Columns.Count - 1; i++)
                {
                    for (int j = 0; j <= ds.Tables[0].Rows.Count - 1; j++)
                    {
                        if (ds.Tables[0].Columns[i].DataType.ToString() == "System.String")
                        {
                            if (ds.Tables[0].Rows[j][i] == DBNull.Value)
                            {
                                ds.Tables[0].Rows[j][i] = String.Empty;
                            }
                        }
    
                        if (ds.Tables[0].Columns[i].DataType.ToString() == "System.Boolean")
                        {
                            if (ds.Tables[0].Rows[j][i] == DBNull.Value)
                            {
                                ds.Tables[0].Rows[j][i] = false;
                            }
                        }
                    }
                }
    
    
    
    この手順で、
    読み込むxmlに抜けた要素がある場合も
    DataGridViewを手書き/コードから編集、あるいは新規行を追加した場合も
    目的の動作になることを確認しました
    
    動作自体はうまくいったのですが
    少々疑問に思う所もありまして
    
    ※1は、コード中で以下のように初期値を設定しているのですが
    ds.Tables[0].Columns["Name"].DefaultValue = String.Empty;
    
    同じことを型付データセットを作るデザイナーのプロパティから
    設定する方法はあるのでしょうか?
    String.Empty,、<String.Empty>など試してみましたが
    空文字にならず、そのままString.Emptyや<String.Empty>という文字列がDataGridViewに表示されてしまいました
    コードから設定すれば済む事ですが、気になったので
    
    ※2は、
    列の型判定についてです
    最初、以下のコードで型判定できると思ったのですが
    if (ds.Tables[0].Columns[i].DataType is System.String)
    
    VisualStudioのエディターで緑波線がついて
    「式は指定された型’string’ではありません」
    とあり、実際に正しく判定されませんでした
    それで、ToString()でキャストした後、文字列として判定する方法に変更した所うまくいきました
    最初のコードがダメな理由がわかりません
    
    
    
    ■No87091 (WebSurfer さん) に返信
    > (1) SQL Server の Microsoft のサンプルデータベースの Northwind の Products テーブルか
    >   ら以下のクエリを使ってインラインスキーマ付きの xml を生成。
    
    すいません、この手順がわからないのですが
    これはVisualStudioで行う操作なのでしょうか?
    SQLは全く触ったことが無いもので・・・
    
記事No.87059 のレス /過去ログ149より / 関連記事表示
削除チェック/

■87277  Re[3]: DataGridViewの編集モード移行
□投稿者/ WebSurfer -(2018/05/03(Thu) 11:12:25)
    No87268 (big7_8 さん) に返信

    【追伸】

    以前の他スレッド(url 下記)の話を思い出してのレスですが、SQL Server, Access, MySQL 等を
    使うことにどうしても抵抗があって踏み切れないなら、独自構造のファイルではなくて xml ファイ
    ルを使うという案はいかがですか?

    datagridviewからxmlへの出力について
    http://bbs.wankuma.com/index.cgi?mode=al2&namber=87059

    上のスレッドのレス No87091 のように実装すれば「DataGridViewの編集モード移行」とかは考える
    必要はなく、ユーザーは DataGirdView を編集でき、編集結果は自動的に DataSet / DataTable に
    反映されます。

    そして、編集済みの DataSet / DataTable の内容はごく簡単なコードで xml ファイルに反映でき
    ます。(.NET のライブラリにその目的に利用できるものがありますので、自力でコードを書くのは
    かなり少なくて済みます)

    xml ファイルを使うのもダメということなら、せめて以下のように階層を分けて考えてみてはいか
    がですか?(BL はビジネスロジックの略で、レス No87091 で言うと (3) が該当します)

    DataGridView ⇔ BindingSource ⇔ DataSet / DataTable ⇔ BL ⇔ 独自構造ファイル

    そうすれば、話は「⇔ BL ⇔ 独自構造ファイル」部分だけを考えれば済みそうな気がします。
記事No.87254 のレス /過去ログ150より / 関連記事表示
削除チェック/

■87284  Re[4]: DataGridViewの編集モード移行
□投稿者/ big7_8 -(2018/05/03(Thu) 18:28:40)
>
    No87277 (WebSurfer さん) に返信

    WebSurfer さん

    big7_8です。
    度々、ご親切にご指導ありがとうございます。


    > 以前の他スレッド(url 下記)の話を思い出してのレスですが、SQL Server, Access, MySQL 等を
    > 使うことにどうしても抵抗があって踏み切れないなら、独自構造のファイルではなくて xml ファイ
    > ルを使うという案はいかがですか?

    xmlファイルのご提案ありがとうございます。
    しかし、その必要はもうありません。

    本日、SQL Server Express 2014 をダウンロードし、インストールしました。

    オープンソースのDBはいろいろありますが、Visual Studio 2017に相性のいいのは
    やはりMicrosoftの製品だと思います。
    で、同社のSQLを検索するとExpressが無償とのこと。
    DBとしての規模も小規模事業者向けとはいえ、10GBは十分な規模です。
    Express2017はOSが対応していないので、win7に対応するバージョンを探すと
    Express2014でした。

    ということで、無償提供していただいているMicrosoftに感謝しつつ、
    同製品をダウンロードし、インストールしました。
    まだ、インストールしただけで、何をどうすればいいか五里霧中ですが・・・


    > 上のスレッドのレス No87091 のように実装すれば「DataGridViewの編集モード移行」とかは考える
    > 必要はなく、ユーザーは DataGirdView を編集でき、編集結果は自動的に DataSet / DataTable に
    > 反映されます。

    ご指摘の通り、元々DBはデータの追加、変更、削除等を前提としたソフトですから、
    「DataGridViewの編集モ行ード移行」は不必要なのかもしれません。

    取り敢えず、しばらくはSQL Server Express 2014と格闘してみたいと思います。


    もしかしたら、DataGirdViewとSQLの連携等でまたご指導をお願いするかもしれません。

    尚、今後の方針としては
    @独自DBをSQLに移行する方法を試みる
    A独自DBでのDataGridViewの編集モ行ード移行する方法を模索する
    この2本立てで行くことにしたいと思います。


    WebSurfer さんには申し訳ありませんが、私としてはあっさり、当方の
    構築したDBを捨て切れないものがあります。
    まあ、仮に独自DBでうまく行っても、将来的にはSQLになるんでしょうが・・・


記事No.87254 のレス /過去ログ150より / 関連記事表示
削除チェック/



<< 0 >>

パスワード/

- Child Tree -