NullReferenceException

Posted by muchag | C#,Library & PlugIn & AddIn |
初回投稿:2018-03-22 (木) 21:29:17 | 最終更新:2018-03-22 (木) 21:38:32

【環境】
NPOI: 2.3.0
Visual C#: 15.5.4(2017)
.NETFramework,Version: v4.6.1
経緯

ある日突然例外がスローされた。

System.NullReferenceException: オブジェクト参照がオブジェクト インスタンスに設定されていません。

見てみると、どうやら GetRow で失敗しているんだけど
何故か、22行目で突然失敗。

原因

CreateRow や CreateCell をしておらず
その行やセルが見つからない、ってことだったみたい。
stack overflow:NullReferenceException accessing Workbook Cells with NPOI(2016-10-23)

これが、一から作成してる Excel ファイルではなく
テンプレートファイルを用意していたので
ちょっと混乱した。

7行目から先は全て空白行なので
21行目も22行目もどちらも空白行なのに
22行目で突然エラー。

解決(邪道)

どうやら、21行目までは見た目空白行であっても
書式設定か何かがされていて、NPOI 側で既存と認識できていたみたい。

なので、100行目までフォント色を「自動」にしたら
例外にならなくなった。

本当は CreateRow や CreateCell をするのが正しい解決方法だと思うけど
今晩は時間がないので暫定で対応。

Posted by muchag | C#,Library & PlugIn & AddIn |
初回投稿:2018-03-22 (木) 21:29:17 | 最終更新:2018-03-22 (木) 21:38:32

R Index

Posted by muchag | R |
初回投稿:2018-03-11 (日) 13:23:49 | 最終更新:2018-03-11 (日) 13:30:43

丸っきりの書きかけ項目は Not found になる。

一般
  1. 設定(Preferences)
    1. eclipse.ini

 

パッケージ

 

がい~ん!(はまったこと)
  1. 解決済み(たぶん)
  2. 未解決

 

参考

公式:The Comprehensive R Archive Network

Wikipedia:R言語

RStudio
→R言語IDE

Qiita:プログラマーのためのR言語入門(2017-12-26)
Qiita:プログラマーのためのR言語入門 その2 ~分析・表示編~(2017-02-27)

Qiita:Rのパッケージまとめ~これだけはインストールしておくと便利というものを厳選(2016-12-20)

Posted by muchag | R |
初回投稿:2018-03-11 (日) 13:23:49 | 最終更新:2018-03-11 (日) 13:30:43

editorconfig-eclipse

Posted by muchag | CakePHP 3.x,Eclipse,Library & PlugIn & AddIn |
初回投稿:2018-03-07 (水) 16:21:41 | 最終更新:2018-03-07 (水) 20:45:00

.editorconfig に対応するためのプラグイン。

CakePHP3 の コーディング規約 を調べていたら
.editorconfig なるものの存在を知った。

これを Eclipse で利用できるようになるプラグイン。

【環境】
editorconfig-eclipse: 0.3.0.201702161018 Beta
Eclipse:Oxygen (4.7)
EPP Marketplace Client:1.5.1.v20160929-1432
OS:Windows10 Pro 64bit
インストール
[ヘルプ]-[Eclipse マーケットプレース] 検索窓に「editorconfig」
「editorconfig-eclipse 0.x」がヒットするので [インストール] ライセンスに同意して [完了]
警告:署名なしコンテンツを含むソフトウェアをインストールしています。
このソフトウェアの真正性または妥当性を実証できません。
インストールを続行しますか?

がーん。。。断念。 😥

Posted by muchag | CakePHP 3.x,Eclipse,Library & PlugIn & AddIn |
初回投稿:2018-03-07 (水) 16:21:41 | 最終更新:2018-03-07 (水) 20:45:00

DateTime

Posted by muchag | C# |
初回投稿:2018-02-11 (日) 12:23:12 | 最終更新:2018-02-11 (日) 12:28:15


MSDN:DateTime 構造体
MSDN:DateTime 演算子
MSDN:DateTimeOffset 構造体

【環境】
Visual C#: 15.5.4(2017)
文字列変換

dobon.net:日時(DateTimeオブジェクト)を文字列に変換する

Posted by muchag | C# |
初回投稿:2018-02-11 (日) 12:23:12 | 最終更新:2018-02-11 (日) 12:28:15

双方向データバインド

Posted by muchag | C# |
初回投稿:2018-02-11 (日) 12:21:07 | 最終更新:2019-12-17 (火) 21:18:59

【環境】
.NET Framwork: 4.5
Visual Studio: 2019C 16.4.1
前提

今回は、VB 案件で試したので、VB で。

本体プロジェクト(Windows フォームアプリ)とは別に
ユーザコントロール用クラスライブラリプロジェクトを作成。
(以下、コントロールプロジェクト)

手順
コントロールデザイン

コントロールプロジェクトを新規作成。

デフォルトで用意されたファイルに、テキストボックスなどを配置。

データバインディング用クラスを作成

Public Class ProfileEntity
    Public Property FirstName() As String = ""
    Public Property FamilyName() As String = ""
    Public Property Age() As Integer = 0
    Public Property Gender() As Integer = 0
End Class

そして、性別ラジオボタンのデータバインディングをどうすればよいか
と考えたら、全然思いつかなかった。

Google 先生にも質問してみたけど
ドンピシャの回答は得られなかった。

今後の課題。

バインディング
  1. [データソース] ビューで、[新しいデータソースの追加]
  2. 「データソースの種類の選択」ダイアログ
    1. [オブジェクト] を選択
    2. [次へ]
  3. 「データ オブジェクトの選択」ダイアログ
    1. ツリーを開いて、対象オブジェクトにチェック
    2. [完了]
  4. コントロールデザインへ、DataSource コントロールを配置
    1. DataSource コントロールの DataSource プロパティから
      1. [他のデータソース]-[プロジェクト データソース]-[(先程登録したオブジェクト)]
  5. フォーム上の各コントロールの (DataBindings) の対象プロパティへ、オブジェクトプロパティをバインディング
    1. ComboBox:SelectedValue プロパティ?
    2. TextBox:Text プロパティ
  6. ソースへデータオブジェクトのインスタンスを、DataSource へ設定するメソッドを追加

Public Sub SetDataSource(ByVal profile As ProfileEntity)
    Me.DataSource1.DataSource = profile
End Sub

試行錯誤に書いた通り、DataSource プロパティを外から設定することはできない。

フォーム利用
  1. コントロールプロジェクトをビルド
  2. 本体プロジェクトを新規作成
  3. 本体プロジェクト内の [参照] のコンテキストメニューから [参照の追加]
  4. 「参照マネージャー」ダイアログ
    1. [参照] から、コントロールプロジェクトの .dll を選択
  5. コントロール追加 の手順でツールボックスへ自作コントロールを追加
  6. 自作コントロールを、ツールボックスからフォームへ D&D
参考サイト

MSDN:とあるコンサルタントのつぶやき Part 1. 双方向データバインドの基本的な使い方(2009-02-26)
→とてもわかりやすい解説

@IT:WPF/UWP:ラジオボタンを双方向バインディングするには?[C#/VB](2016-02-03)
→ラジオボタンにおける双方向データバインド

試行錯誤
ユーザコントロールクラスを作成

UserControl クラスを継承するのに、下記のように書いたら

ステートメントの終わりを指定してください。

と怒られた。


Public Class ProfileControl Inherits UserControl

End Class

これが正解。


Public Class ProfileControl
    Inherits UserControl

End Class
データバインディング用クラスを作成
メンバ変数

メンバ変数ではダメ。

これでは、データバインディングのときに
選択肢として出てこなかった。

Public Class ProfileEntity
    Public FirstName As String = ""
End Class
古い記述

プロパティとして宣言すれば問題なかった。

けど、これは古い書き方らしい。


Public Class ProfileEntity
    Private _firstName As String = ""
    Public Property FirstName() As String
        Get
            Return _firstName
        End Get
        Set(value As String)
            _firstName = value
        End Set
    End Property
End Class
DataSource 設定

コントロールを利用するフォーム側で DataSource を設定しようとしたら
できなかった。

なので、コントロール側に、DataSource を設定するメソッドを追加した。

Posted by muchag | C# |
初回投稿:2018-02-11 (日) 12:21:07 | 最終更新:2019-12-17 (火) 21:18:59

LINQ -> Where

Posted by muchag | C# |
初回投稿:2018-02-08 (木) 10:54:02 | 最終更新:2018-02-11 (日) 12:16:10

【環境】
Visual C#: 15.5.4(2017)
OR

if 文と同じように書けば良い。


.Where(x => x == 1 || x => x == 2)
動的に生成

C#erの備忘録:Linqの動的条件生成ライブラリ(2013-02-16)
→ありがたくライブラリを使わせていただいたけど、期待通りには動かなかった。


var condition = ConditionChain.Create(condition1).OrElse(condition2);

ここで、null になっちゃったんだったっけか。。。

Posted by muchag | C# |
初回投稿:2018-02-08 (木) 10:54:02 | 最終更新:2018-02-11 (日) 12:16:10

Database operation expected to affect 1 row(s) but actually affected 0 row(s).

Posted by muchag | C# |
初回投稿:2018-02-06 (火) 0:12:26 | 最終更新:2018-02-06 (火) 0:17:58

【環境】
Visual C#: 15.5.4(2017)
経緯

SQLite3 で管理しているデータを削除しようとしたら
下記エラーが出た。

{“Database operation expected to affect 1 row(s) but actually affected 0 row(s). Data may have been modified or deleted since entities were loaded. See http://go.microsoft.com/fwlink/?LinkId=527962 for information on understanding and handling optimistic concurrency exceptions.”} Microsoft.EntityFrameworkCore.DbUpdateConcurrencyException

データが既に更新またや削除されているよ。。。って、誰よ~TT

原因

データベースに格納されている日付文字列が「2018-02-05」となっていたため
DateTime 型で値を持っている C# では「2018-02-05 00:00:00」となり
整合性が取れなくなっていたみたい。

解決

データベース側の値を「2018-02-05 00:00:00」とすることで
エラーは出なくなった。

愚痴

そもそも SQLite のデータ型に DateTime がないから・・・。
ん~なんで、初期データを「2018-02-05」しちゃったんだろう。。。
私がアホなだけよね。。。

Posted by muchag | C# |
初回投稿:2018-02-06 (火) 0:12:26 | 最終更新:2018-02-06 (火) 0:17:58

ハッシュ値

Posted by muchag | C# |
初回投稿:2018-01-28 (日) 22:27:38 | 最終更新:2018-01-28 (日) 22:32:33

暗号化って、全然勉強できてないな~。
今回はまずは序章ということで、参考サイトのまんま実装してみる。
何かの記事に書いてあったけど、もう MD5 はやばいそうな。

「せめて 256 バイト以上のものを利用しましょう」とあったので
試してみた。

【環境】
Visual C#: 15.5.4(2017)
SHA256

行け!偏差値40プログラマー:[ C# ] SHA256 で文字列のハッシュ値を計算・取得する


// 文字列のハッシュ値(SHA256)を計算・取得する
protected string _GetHashedTextString(string passwd)
{
    // パスワードをUTF-8エンコードでバイト配列として取り出す
    byte[] byteValues = Encoding.UTF8.GetBytes(passwd);
 
    // SHA256のハッシュ値を計算する
    SHA256 crypto256 = new SHA256CryptoServiceProvider();
    byte[] hash256Value = crypto256.ComputeHash(byteValues);
         
    // SHA256の計算結果をUTF8で文字列として取り出す
    StringBuilder hashedText = new StringBuilder();
    for (int i = 0; i < hash256Value.Length; i++)
    {
        // 16進の数値を文字列として取り出す
        hashedText.AppendFormat("{0:X2}", hash256Value[i]);
    }
    return hashedText.ToString().ToLower();
}

ほぼ、上記サイトからいただいてきたんだけど
18行目だけ。

そもそものハッシュ値を、
Good-Tool.net:ハッシュ値の一括計算・生成ツール(無料)
で生成したため、ToLower だけ追加した。

Posted by muchag | C# |
初回投稿:2018-01-28 (日) 22:27:38 | 最終更新:2018-01-28 (日) 22:32:33

「OK」「キャンセル」

Posted by muchag | C#,Visual Studio |
初回投稿:2018-01-28 (日) 20:28:51 | 最終更新:2018-01-28 (日) 22:40:07

フォームの「OK」「キャンセル」ボタンのお話。

【環境】
Visual C#: 15.5.4(2017)
キー連動

フォーム表に配置したボタンに「OK」「キャンセル」の挙動を持たせる。
=Enter 押下で反応する「OK」ボタン、ECS 押下で反応する「キャンセル」ボタン。

フォームのプロパティ
AcceptButton:「OK」の挙動をするボタンの Name を設定
CancelButton:「キャンセル」の挙動をするボタンの Name を設定

手書き

下記のように手書きして、Form の Key_Down イベントへ登録する手もある。


private void Login_KeyDown(object sender, KeyEventArgs e)
{
    if (e.KeyCode == Keys.Enter)
    {
    }
    else if (e.KeyCode == Keys.Cancel)
    {
    }
}
値の受け渡し

値の受け渡し

Posted by muchag | C#,Visual Studio |
初回投稿:2018-01-28 (日) 20:28:51 | 最終更新:2018-01-28 (日) 22:40:07

アプリケーション設定

Posted by muchag | C#,Visual Studio |
初回投稿:2018-01-28 (日) 18:47:49 | 最終更新:2018-01-28 (日) 23:22:14

アプリケーション内の設定のこと。
preference の方が区別が付くかも?

この話、どこかの記事に書いた気がするんだけど
見つけられないので、改めて記述。

【環境】
Visual C#: 15.5.4(2017)
入れ物

プロジェクトのコンテキストメニュー [プロパティ] 左ペイン [設定]

こちらの画面で、1つずつ下記を設定していく。
名前:設定値の名称。任意。プログラム内で使用するので、アルファベットで設定してね
種類:設定値のデータ型
スコープ:
アプリケーション:全ユーザー統一
ユーザー:ユーザー毎
値:値

利用

// 取得
txtUsername.Text = Properties.Settings.Default.LoginUsername;
Properties.Settings.Default.Save();

// 設定
Properties.Settings.Default.LoginUsername = "username";
保存場所

ユーザー設定は、ユーザーの非表示のローカル アプリケーション データ フォルダーのサブフォルダー内のファイルに保存されます。

MSDN:方法 : 実行時にユーザー設定を C# で書き込む

というわけで、SQLite -> 導入 にも書いた通り

C:\Users\[user_name]\AppData\Local\Packages\(おそらくランダム文字列)\LocalState

にあるみたいだけど、上記記事は UWP の場合なわけで
フォームアプリケーションの場合は、パッケージ ID をどこで見ればいいのかしらね~。

Posted by muchag | C#,Visual Studio |
初回投稿:2018-01-28 (日) 18:47:49 | 最終更新:2018-01-28 (日) 23:22:14
« 前ページへ次ページへ »