teratail header banner
teratail header banner
質問するログイン新規登録

質問編集履歴

4

編集が途中だったため

2018/03/17 10:46

投稿

退会済みユーザー
title CHANGED
File without changes
body CHANGED
@@ -77,9 +77,23 @@
77
77
  ### **追記(2)**
78
78
  ご回答いただきましたソースを元に、以下を作成いたしました。
79
79
 
80
+ - 表にキーボードから記入できるようになった
81
+ - 表に行を追加することができるようになった
82
+
83
+ お陰様で、上記二つの問題は解決いたしました。
84
+
85
+ 残る問題は
86
+
87
+ - 表に記入されているデータを参照する
88
+ - あらかじめ表にデータを入力しておく(表に入力したデータをテキストファイルか何かに保存し、それを次回に改めて表示することができる)
89
+
90
+ の二点となりました。
91
+ 何卒、解決への糸口をご教授いただければと思います。
92
+
80
93
  #### 現状
94
+ 解決したソースを掲載させて頂きます。
95
+
81
- 1.TableViewについてのカスタマイズ
96
+ 1.TableViewについてのカスタマイズ(ご回答頂きましたソースのままです)
82
- (ご回答頂きましたソースのままです)
83
97
  ```
84
98
  using System;
85
99
  using System.Collections.Generic;
@@ -255,4 +269,30 @@
255
269
  ```
256
270
 
257
271
 
272
+ #### やりたいこと
258
- #### 表に記入した内容を参照するためにしたこと
273
+ - 表に記入されているデータを参照する
274
+ - あらかじめ表にデータを入力しておくことができる
275
+ - ↑(表に入力したデータをテキストファイルか何かに保存し、それを次回に改めて表示することができる)
276
+
277
+
278
+ ![表のサンプル画像](0575d61e0988242da4b092033511a355.png)
279
+ 上記画像のように、選択されている行の値を参照したいと考えています。
280
+ また、上記のように表へあらかじめデータを入力しておき、その続きから改めて行の追加を行いたいと考えています。
281
+
282
+ まず、
283
+ 2列目(キーがDetailである列(上記、「現状」のコード参照))を取得しようと、以下のようにコードを書きましたが、結果的に空のStringしか取得できませんでした。
284
+ ```
285
+ partial void ClickButton_GetValue(NSObject sender)
286
+ {
287
+ var DataSource = (FreeEncodeMailer.ProductTableDataSource)TableView.DataSource;
288
+ string address = DataSource.Products[(int)TableView.SelectedRow].Title;
289
+ }
290
+ ```
291
+ →他にもいくつか試したのですが。どれもエラーを吐いてしまい、動作しませんでしたので掲載を省きました。
292
+
293
+
294
+ どうすれば、表の値を参照できるのでしょうか?
295
+ また、どうすれば「やりたいこと」を実現できるでしょうか?
296
+
297
+ 度々申し訳ございませんが、ご回答をお待ちしております。
298
+ 何卒よろしくお願いいたします。

3

追記のため

2018/03/17 10:46

投稿

退会済みユーザー
title CHANGED
File without changes
body CHANGED
@@ -46,7 +46,7 @@
46
46
  何卒、お知恵の拝借をよろしくお願い致します。
47
47
 
48
48
 
49
- ### 追記(1)
49
+ ### **追記(1)**
50
50
 
51
51
  ご回答いただきましたURLを元に、少しだけ改良致しました。
52
52
  そのコードと、結果になります。
@@ -71,4 +71,188 @@
71
71
 
72
72
  今後、回答で頂いたURLを読みながら少しずつ改変していきたいと思います。
73
73
 
74
- 何卒よろしくお願いいたします。
74
+ 何卒よろしくお願いいたします。
75
+
76
+
77
+ ### **追記(2)**
78
+ ご回答いただきましたソースを元に、以下を作成いたしました。
79
+
80
+ #### 現状
81
+ 1.TableViewについてのカスタマイズ
82
+ (ご回答頂きましたソースのままです)
83
+ ```
84
+ using System;
85
+ using System.Collections.Generic;
86
+ using AppKit;
87
+
88
+ namespace FreeEncodeMailer
89
+ {
90
+ public class Product
91
+ {
92
+ #region Computed Propoperties
93
+ public string Title { get; set; } = "";
94
+ public string Description { get; set; } = "";
95
+ #endregion
96
+
97
+ #region Constructors
98
+ public Product()
99
+ {
100
+ }
101
+
102
+ public Product(string title, string description)
103
+ {
104
+ this.Title = title;
105
+ this.Description = description;
106
+ }
107
+ #endregion
108
+ }
109
+
110
+
111
+
112
+ /// <summary>
113
+ /// TableDataSource
114
+ /// </summary>
115
+ public class ProductTableDataSource : NSTableViewDataSource
116
+ {
117
+ #region Public Variables
118
+ public List<Product> Products = new List<Product>();
119
+ #endregion
120
+
121
+ #region Constructors
122
+ public ProductTableDataSource()
123
+ {
124
+ }
125
+ #endregion
126
+
127
+ #region Override Methods
128
+ public override nint GetRowCount(NSTableView tableView)
129
+ {
130
+ return Products.Count;
131
+ }
132
+ #endregion
133
+ }
134
+
135
+
136
+
137
+ /// <summary>
138
+ /// ProductTableDelegate
139
+ /// </summary>
140
+ public class ProductTableDelegate : NSTableViewDelegate
141
+ {
142
+ #region Constants
143
+ private const string CellIdentifier = "ProdCell";
144
+ #endregion
145
+
146
+ #region Private Variables
147
+ private ProductTableDataSource DataSource;
148
+ #endregion
149
+
150
+ #region Constructors
151
+ public ProductTableDelegate(ProductTableDataSource datasource)
152
+ {
153
+ this.DataSource = datasource;
154
+ }
155
+ #endregion
156
+
157
+ #region Override Methods
158
+ public override NSView GetViewForItem(NSTableView tableView, NSTableColumn tableColumn, nint row)
159
+ {
160
+ // This pattern allows you reuse existing views when they are no-longer in use.
161
+ // If the returned view is null, you instance up a new view
162
+ // If a non-null view is returned, you modify it enough to reflect the new data
163
+ NSTextField view = (NSTextField)tableView.MakeView(tableColumn.Title, this);
164
+ if (view == null)
165
+ {
166
+ view = new NSTextField();
167
+ view.Identifier = tableColumn.Title;
168
+ view.BackgroundColor = NSColor.Clear;
169
+ view.Bordered = false;
170
+ view.Selectable = false;
171
+ view.Editable = true;
172
+
173
+ view.EditingEnded += (sender, e) => {
174
+
175
+ // Take action based on type
176
+ switch (view.Identifier)
177
+ {
178
+ case "Product":
179
+ DataSource.Products[(int)view.Tag].Title = view.StringValue;
180
+ break;
181
+ case "Details":
182
+ DataSource.Products[(int)view.Tag].Description = view.StringValue;
183
+ break;
184
+ }
185
+ };
186
+ }
187
+
188
+ // Tag view
189
+ view.Tag = row;
190
+
191
+ // Setup view based on the column selected
192
+ switch (tableColumn.Title)
193
+ {
194
+ case "Product":
195
+ view.StringValue = DataSource.Products[(int)row].Title;
196
+ break;
197
+ case "Details":
198
+ view.StringValue = DataSource.Products[(int)row].Description;
199
+ break;
200
+ }
201
+
202
+ return view;
203
+ }
204
+
205
+ public override bool ShouldSelectRow(NSTableView tableView, nint row)
206
+ {
207
+ return true;
208
+ }
209
+ #endregion
210
+ }
211
+
212
+
213
+ }
214
+ ```
215
+
216
+ 2.動作を記述する部分への表記
217
+ ```
218
+ // 画面がロードされた時
219
+ public override void ViewDidLoad()
220
+ {
221
+ base.ViewDidLoad();
222
+
223
+ var DataSource = new ProductTableDataSource();
224
+ // Populate the Product Table
225
+ TableView.DataSource = DataSource;
226
+ TableView.Delegate = new ProductTableDelegate(DataSource);
227
+ }
228
+
229
+ public override NSObject RepresentedObject
230
+ {
231
+     get
232
+ {
233
+ return base.RepresentedObject;
234
+ }
235
+ set
236
+ {
237
+ base.RepresentedObject = value;
238
+ // Update the view, if already loaded.
239
+ }
240
+ }
241
+
242
+
243
+ // 追加ボタンを押すと入力できる行が追加できるようになりました
244
+ partial void ClickButton_NewAddress(NSObject sender)
245
+ {
246
+ TableView.BeginUpdates();
247
+
248
+ var DataSource = new ProductTableDataSource();
249
+ DataSource = (FreeEncodeMailer.ProductTableDataSource)TableView.DataSource;
250
+ DataSource.Products.Add(new Product("", ""));
251
+
252
+ TableView.ReloadData();
253
+ TableView.EndUpdates();
254
+ }
255
+ ```
256
+
257
+
258
+ #### 表に記入した内容を参照するためにしたこと

2

途中だった

2018/03/17 10:13

投稿

退会済みユーザー
title CHANGED
File without changes
body CHANGED
@@ -64,6 +64,11 @@
64
64
  ```
65
65
 
66
66
  以下、結果になります。
67
+ ![結果](0f33d9211a930a1814c573bb8bdb3e8f.png)
68
+ - なぜか矢印部分に「Zero」〜「Nine」までの文字か勝手に入力される
69
+ - 選択箇所の後ろ側?だけ、青く色が変わっている
70
+ - 文字の編集などはできない
67
71
 
72
+ 今後、回答で頂いたURLを読みながら少しずつ改変していきたいと思います。
68
73
 
69
- なぜか矢印部分に「Zero」〜「Nine」までの文字か勝手に入力されています。
74
+ 何卒よろしくお願いたします。

1

追記

2018/03/14 10:47

投稿

退会済みユーザー
title CHANGED
File without changes
body CHANGED
@@ -43,4 +43,27 @@
43
43
  入力した値が参照をおこないたいと考えています。
44
44
 
45
45
  何か説明不足や、疑問点があれば仰ってください。すぐに追記いたします。
46
- 何卒、お知恵の拝借をよろしくお願い致します。
46
+ 何卒、お知恵の拝借をよろしくお願い致します。
47
+
48
+
49
+ ### 追記(1)
50
+
51
+ ご回答いただきましたURLを元に、少しだけ改良致しました。
52
+ そのコードと、結果になります。
53
+ ```
54
+ private void aaa()
55
+ {
56
+ title_column.Title = "名前";
57
+ address_column.Title = "アドレス";
58
+
59
+ tableview.DataSource = new TableDataSource();
60
+ tableview.Delegate = new TableDelegate();
61
+
62
+ TextGrid.DocumentView = tableview;
63
+ }
64
+ ```
65
+
66
+ 以下、結果になります。
67
+
68
+
69
+ なぜか矢印部分に「Zero」〜「Nine」までの文字か勝手に入力されています。