1001 Microsoft Visual Basic Programming Tips

副标题:无

作   者:(美)Ted Coombs,(美)Jon Campbell著;邓少鵾,邓云佳等译

分类号:

ISBN:9787508428901

微信扫一扫,移动浏览光盘

简介

  本书对visualbasic做了全方位的介绍,深入浅出地讲述visualbasic各种编程诀窍,以高屋建瓴的眼光看待vb编程的诀窍和思想,力图将最全面最实用的技术展现给读者。本书以其翔实知识面的覆盖、大量实用的示例和作者自身丰富的编程经验,详细介绍了visual basic语言的基本概念、输入与输出、流程控制、控件、数据库应用、报表、activex及其在web和网络方面的应用开发等等。全书面向实例进行阐述,讲解透彻独到。本书既可作为初学者和大专院校师生的自学参考书,也可作为计算机软件开发人员的技术参考书。    书中所需的素材文件可从中国水利水电出版社网站(www.waterpub.com.cn)下载。以下简称为网站上下载。    visual basic编程实用大全(精华版)将使程序员彻底了解visual basic 6。在原有的基础上,这个新版本的特色扩展到visual 8asic script,包括使用active server page来创建web页面。在这个新版本中也介绍了lightweight directory access protocol——一种新的面向对象的存储数据的方式。总而言之,本书覆盖了整个visual basic 6方方面面的知识,对于初学者和职业程序员来说都是最佳选择。

目录

精华版序
译者序
1 Visual Basic工程文件说明
2 编写第一个Visual Basic程序
3 换行显示输出
4 使用Visual Basic常量
5 捕获程序中的错误
6 开始理解作用域
7 使用DIM语句
8 声明模块和窗体级的变量
9 声明过程变量
10 协调变量名冲突
11 使用Public关键字定义变量
12 为变量赋值
13 理解变量类型
14 声明同样类型的多个变量
15 理解Visual Basic的关键字
16 理解Option Explict语句
17 理解Option Base语句
18 理解Integer类型变量
19 理解Long类型变量
20 理解String类型变量
21 理解Single类型变量
22 理解Boolean类型变量
23 理解Byte变量类型
24 理解Currency类型变量
25 理解Date类型变量
26 理解Double类型变量
27 理解Obiect类型变量
28 理解Variant类型变量
29 理解控件类型
30 给浮点变量赋值
31 给Integer和Long类型的变量赋值
32 给String类型变量赋值
33 给Single和Double类型变量赋值
34 给Boolean类型变量赋值
35 给Byte类型变量赋值
36 给Currency类型的变量赋值
37 理解Obiect类型的变量
38 给Date类型的变量赋值
39 理解溢出
40 理解精度
41 引号和其他字符的赋值
42 使用Chr函数
43 使用Debug.Print来输出信息
44 使用Str函数将数字转换成字符串
45 使用Format函数将数字转换成字符串
46 使用Format函数将日期转换成字符串
47 Visual Basic的基本数学操作
48 理解按模运算
49 理解运算符的优先级
50 强行改变运算符的运算顺序
51 理解按位操作的0r运算
52 理解Xor运算
53 理解按位操作的And运算
54 理解按位操作的Eqv运算
55 理解按位操作的Imp运算
56 理解Visual Basic如何表示True和False
57 测试IF-Then的条件
58 理解圆括号在条件语句中的用途
59 执行相关判断
60 执行逻辑And运算对两个条件进行判断
61 执行逻辑Or运算来两个条件进行判断
62 执行逻辑Not运算
63 执行逻辑Xor运算
64 执行逻辑Eqv运算
65 执行逻辑Imp运算
66 将判断条件的结果赋值给变量
67 测试浮点值
68 不间断循环
69 定义常量
70 谨慎使用If-If-Else
71 在限定次数内执行语句
72 For语句的可选部分
73 在For-Next语句中使变量递减
74 控制For-Next循环的步长
75 For-Next循环不仅仅适用于Integer变量
76 理解DoEvents循环
77 无限(Infinite)循环的危险
78 使用For-Next的嵌套循环
79 改变控制变量的值
80 在条件语句中使用Next
81 使用Exit For语句终止循环
82 使用Do循环重复执行一条或者多条语句
83 理解Do循环的组成部分
84 使用While-Wend创建循环
85 总是使用Do循环执行一条或多条语句
86 使用Do Until Loop重复执行一条或者多条语句
87 使用Exit Do结束循环
88 GOTO分支
89 测试多个条件
90 理解Case Else语句
91 可视化Visual Basic字符串
92 Visual Basic如何保存字符串
93 Visual Basic如何保存可变长度的字符串
94 理解零结尾字符串
95 如何区分A和a
96 使用Option Compare Text开关
97 确定字符串的长度
98 将String变量的字符复制到另外一个String变量中
99 将String变量的内容添加到另一个String变量中
100 在String变量中添加N个字符
101 处理超长字符
102 在确定字符串是否相等时忽略大小写
103 捕获String变量中的第一个出现的字符
104 理解Simple语句和Compound语句
105 寻找字符串中最后一个出现的字符
106 计算String变量中出现同一字符的次数
107 逆向显示String变量的内容
108 两个字符串的比较
109 两个字符串前N个字符的比较
110 将字符串转换为数字表示
111 在字符串中定位子字符串
112 从字符串的一个位置返回n个字符
113 计算子字符串出现的次数
114 使用TextBox控件
115 使用RichTextBox控件
116 使用RichTextBox控件的Find方法
117 获得最右边子字符串的位置
118 在字符串中删除某个子字符串
119 用另一个子字符串替换某个子字符串
120 在RichTextBox控件里删除文本
121 在RichTextBox控件里使用其他文本替换控件里的文本
122 判断一个字符是否是字母表中的字符
123 判断一个字符是否是数字
124 判断一个字符是否是大写或者小写
125 判断字符串是否是Date
126 将一个字符转换为大写或小写字母
127 对ASCII字符进行操作
128 格式化字符串变量
129 对字符串使用Select CaSe
130 使用换行变量
131 使用函数返回值
132 指定参数类型
133 理解局部变量
134 理解函数的系统开销
135 通过声明参数类型来减少系统开销
136 声明全局变量
137 解决全局变量和局部变量名的冲突
138 更好地定义变量的作用域
139 理解传值调用
140 为什么传值调用可以防止参数值的改变
141 改变参数值
142 只改变指定参数
143 可记忆的函数变量
144 可记忆的过程
145 Visual Basic如何初始化静态变量
146 使用关键字Static可能引起的错误
147 理解形参和实参
148 理解作用域
149 使用Variant函数来返回未知类型的值
150 使用具有Variant参数的VarType成员函数
151 使用TypeName成员函数
152 在返回值中使用VarType或者TypeName
153 在函数中更新全局变量
154 使用函数更改算术表达式中的变量
155 在窗体上创建Private过程
156 从过程中调用过程
157 理解递归
158 理解递归Factorial函数
159 通过显示值来更好地理解递归
160 是否使用递归
161 对Date进行处理
162 如何消除递归
163 理解名称空间和标识符
164 理解标识符的可见性
165 支持参数数目可变的函数
166 支持可变数目的参数
167 创建一个支持多类型、多参数的函数
168 使用关键字Optional
169 理解IsMissing成员函数
170 使用缓冲输入
171 使用输入框来接收输入
172 使用TextBox控件来执行缓冲输入
173 使用直接I/O读取字符
174 清除屏幕上的所有域
175 控制屏幕的色彩
176 分配背景颜色
177 使用Abs函数
178 使用余弦/正切
179 使用正弦/余切
180 使用反正切
181 对浮点值进位
182 对指数进行处理
183 计算自然数的对数
184 计算以10为底数的对数
185 确定最大和最小值
186 将浮点值分割成小数部分和整数部分
187 计算一个数的N次方
188 生成随机数
189 将随机值映射到指定范围
190 启动随机数生成器
191 计算一个值的平方根
192 计算角的正切
193 执行现存净价值计算
194 执行Rate计算
195 创建一个自定义的数学错误处理程序
196 声明一个数组
197 数组的可视化
198 数组的初始化
199 数组元素的访问
200 通过数组元素进行循环
201 使用常量来定义数组
202 向函数中传递数组
203 再次阐述数组和函数

204 向过程传递数组
205 数组的动态分配
206 从分隔字符串中创建一个数组
207 理解多维数组
208 在二维数组中访问元素
209 在二维数组中初始化元素
210 判断多位数组消耗的内存数量
211 二维数组的遍历
212 遍历一个三维数组
213 向函数传递二维数组
214 结构数组的数组
215 在一个数组中寻找一个指定的值
216 理解二元查找
217 使用二元查找
218 理解冒泡排序
219 使用冒泡排序
220 使用选择排序
221 理解Shell排序
222 使用Shell排序
223 使用快速排序
224 排序字符串数组
225 通过QuickSort函数排序数组
226 用Seq_One_Find搜索数组
227 使用TypeNarne成员函数
228 用Bin_Search搜索一个已排序数组
229 确定数组元素的个数
230 循环遍历字符串数组
231 理解结构
232 声明一个结构变量
233 在结构中使用Public和Private关键字
234 形象化一个结构
235 使用结构
236 向函数传递结构
237 改变函数内部的结构
238 初始化结构
239 使用嵌套的结构
240 包含数组的结构
241 创建一个结构数组
242 使用DriveListBox控件
243 使用DriveListBox控件改变驱动器
244 DirectoryListBox控件
245 使用FileListBox控件
246 只显示清单中的部分文件
247 理解CommonDialog控件
248 使用CommonDialog控件模式
249 为CommonDialog控件设置默认路径
250 返回选中的文件和路径
251 保存文本文件
252 通过Cancel选项取消Open或SaveAs
253 使用API浏览器
254 使用GetCurrentDireetory API函数
255 编写Wrapper函数
256 使用SetCurrentDirectory API函数
257 使用GetDiskFreeSpace API函数
258 使用GetVolumelnformation API函数
259 使用GetDriveType API函数
260 捕捉未准备好的驱动器
261 在程序中更改文件名
262 在程序中删除文件
263 在程序中删除目录
264 设置文件访问模式
265 获取文件大小
266 使用Open语句
267 使用Close语句
268 使用文件的读连续访问
269 读文件时使用EOF函数
270 使用文件的写连续访问
271 使用LOF和Loc来读Binary文件
272 用Input和Input#来读取文件
273 使用Write#对连续文件输出
274 使用Put对一个随机访问文件写入数据
275 使用Get从随机访问文件中检索记录
276 使用Seek语句遍历随机访问文件
277 建立临时文件
278 获取Windows路径
279 获取系统路径
280 将文件的I/O操作最小化
281 使用ChDrive和ChDir语句
282 创建目录
283 删除目录
284 用递归删除目录树
285 解析PathName
286 获取文件的日期和时间标签
287 使用Dir定位目录和文件
288 将Dir返回的文件和目录值进行排序
289 使用Dir定位文件
290 在程序中移动文件
291 搜索文件
292 使用FindFirstFile函数
293 使用FindNextFile在剩下部分查找
294 搜索整个目录树
295 使用由Find操作返回的文件建立用户界面
296 使用Findxxx函数定位目录
297 使用递归删除目录树
298 延迟特定毫秒数
299 检测程序的处理时间
300 将两个时间作比较
301 使用DoEvents来延迟具体的秒数
302 利用整型值设置日期和时间
303 向日期中添加时间
304 理解SDI窗体
305 理解Show方法
306 理解控件数组
307 创建控件数组
308 理解MDI界面的创建
309 建立一个窗体数组
310 用布尔型数组来处理窗体数组
311 用控件数组在运行时建立对象
312 在运行时删除控件数组内的对象
313 使用菜单编辑器
314 创建菜单
315 向菜单添加功能
316 使用菜单的Enabled属性
317 使用菜单的Checked属性
318 建立Windowlist
319 使用Tile和Cascade命令
320 创建菜单数组
321 创建弹出式菜单
322 向弹出式菜单的选项中加入代码
323 使用弹出式菜单
324 创建智能化上下文相关菜单
325 使用Boldcommand属性
326 在菜单内使用Negotiation
327 理解QueryUnload事件和Unload事件
328 控制窗体的Height和Width
329 理解Fr锄e
330 使用容器管理窗体
331 使用GetSystemMetrics API函数
332 结合使用GetSystemMetrics和Resize
333 理解MouseMove事件
334 MousePointer属性
335 使用Mouselcon属性
336 使用窗体的Icon属性
337 理解对象和集合
338 使用Button集合和Button对象
339 创建文本型按钮的工具条
340 理解ImageLi~控件
341 结合使用ImageList和Toolbar控件
342 子窗体和父窗体的工具条
343 仅在父窗体上放置工具条
344 工具条和ActiveForm
345 同时使用工具条和菜单
346 理解StatusBar控件
347 理解Panel对象和Panels集合
348 建立StatusBar控件
349 编写UpdateStatusBar子程序
350 重新考虑公共与私有函数
351 在TextBox中使用KeyPress接受用户口令
352 理解KeyDown事件和KeyUp事件
353 设置窗体的WindowSmte属性
354 控制窗体的标题
355 重新考虑CommonDialog控件
356 使用CommonDialog控件进行打印
357 打印文档至默认打印机
358 理解Printer对象和Printers集合
359 用CommonDialog控件设置Fonts
360 使用CommonDialog设置RichTextBox中的字体
361 过程中的分支和返回
362 使用结构变量代替常量
363 使用枚举类型
364 使用枚举类型
365 理解枚举类型的值
366 给枚举类型赋具体的值
367 使用Shell函数
368 使用临时文件向子进程传递数据
369 使用AppActivate来激活子进程
370 使用Shell函数来顺序运行程序
371 增加监视
372 监视窗口
373 使用标记来进行GoTo循环
374 使用计时器事件来自动保存信息
375 理解不变代码
376 理解代码压缩
377 理解循环压缩
378 使用公共子表达式消除
379 对比声明和定义
380 使用默认类型
381 理解松散(或简化)计算
382 在结构中将函数作为成员使用
383 不同结构中的同名成员
384 理解Visual Basic的类
385 使用类生成器实用程序来创建类
386 使用公共和私有数据
387 使用Property Let和Property Get方法
388 创建类变量的数组
389 使用With-End With
390 为Public和Private成员排序
391 理解ActiveX与OLE 2.0之间的不同之处
392 在Dimension语句中使用WithEvents属性
393 理解ComboBox控件
394 在ComboBox中使用Change和Click事件
395 使用ComboBox改变窗体中的信息
396 理解MaskEdBox控件
397 使用MaskEdBox控件来检验数据
398 重新考虑可重用的对象
399 使用控件事件触发其他事件
400 使用带Listlndex的LostFocus来启动相关的窗体
401 理解初始化子程序
402 使用函数返回用户自定义的类或结构
403 使用PictureBox控件
404 理解Image控件
405 使用Shape控件
406 使用Line控件
407 使用CheckBox获得Boolean值
408 在单个窗体上使用多组OptionButton
409 使用水平和垂直滚动条
410 创建基础的界面
411为MDN程序加入功能
412 加入Find对话框
413 改进多文档记事本应用程序
414 重新考虑Query_Unload事件
415 理解PmgressBar
416 使用ProgressBar控件
417 应用沙漏鼠标指针
418 使用其他鼠标指针属性
419 使用全局变量保护中断
420 开始使用可视化数据管理器
421 使用SQL Create Table语句
422 理解和格式化SQL的CreateTable语句.
423 理解Execute方法
424 使用约束创建索引
425 使用SQL的CreateIndex语句
426 确定索引哪个字段
427 理解Workspace对象
428 使用OpenDatabase方法
429 创建新的数据库
430 理解数据库对象
431 理解Recordset对象
432 使用OpenRecordset方法
433 理解SQL的Select语句
434 检索Recordset
435 理解Order By从句
436 理解Where从句
437 理解Inner Join
438 理解LeftJoin和Right Join
439 理解数据库的设置
440 理解QueryDef对象
441 使用RecordCount属性
442 理解Move方法
443 使用BOF和EOF属性
444 确定Recordset是否为空
445 使用FIND方法
446 使用Seek方法
447 理解书签
448 使用书签
449 使用Scratch Recordset
450 理解Recordset Creation错误
451 理解许可权限
452 理解DAO文档和容器
453 加入新的记录
454 使用Update和Edit方法
455 使用Requery方法
456 理解事务处理
457 使用BeginTrans和CommitTrans
458 理解Data控件
459 使用Data控件操作BOF和EOF
460 理解Data绑定控件
461 理解Data绑定Grid控件
462 使用Data绑定Grid控件
463 调整Data绑定Grid的宽度
464 给Data控件加上RecordCount标题
465 使用Grid控件改变RecordCount标题
466 理解Data绑定ListBox控件
467 使用Data绑定列表控件
468 把DBList控件连接到另外一个控件
469 理解Data绑定ComboBox控件
470 使用Data绑定ComboBox控件
471 理解Clone方法
472 使用Clone方法
473 使用DataChanged属性
474 理解Update查询
475 使用Update查询
476 理解Delete查询
477 理解Union查询
478 理解Group By语句
479 使用Group By语句
480 理解SQL聚集函数
481 使用Sum语句
482 理解Having语句
483 在查询中使用变量
484 使用查询结果创建新的查询
485 和SQL查询一起使用OnError-Resume
486 通过检查值防止发生错误
487 理解远程数据对象
488 理解RemoteData控件
489 使用RemoteDam控件创建Recordset
490 理解RemoteData常量
491 理解rdoEnvironment对象
492 建立远程数据连接
493 维护有关打开连接的信息
494 理解字段对象
495 确定集合中何时使用序数编号
496 使用字段名管理数据库
497 保存无绑定控件的记录
498 更新无绑定控件的记录
499 理解TreeView控件
500 理解节点对象
501 使用TreeView控件
502 理解Nodes集合的Add方法
503 把图像加到TreeView控件
504 在填充TreeView控件的时候使用进度条.
505 从Recordset中填充TreeView控件
506 理解MSComm控件
507 理解CommEvent属性
508 使用MSComm控件
509 使用OnComm事件
510 理解RThreshold和SThreshold属性
511 使用MSComm控件发送数据
512 使用MSComm控件接收数据
513 创建自动发送事件
514 使用Winsock控件
515 理解GetData方法
516 理解SendComplete和SendProgress事件
517 在服务器机器上使用Winsock控件
518 返回Winsock控件的当前状态
519 理解Interact传输控件
520 在Execute方法中使用HTTP命令
521 在Execute方法中使用FTP命令
522 确信保存了用户名和密码
523 连接到Intemet
524 浏览FTP服务器
525 使用Get从FTP服务器获取一个文件
526 对FTP服务器做写操作
527 编写一个自动的FTP上载和下载程序.
528 使用WebBrowser控件
529 理解Navigate方法
530 理解NavigateComplete事件
531 使用ProgressChange事件
532 重新考虑ActiveX
533 理解ActiveX的不同类型
534 理解UserControl对象
535 理解Visual Basic Control Creation Bdition
536 理解ActiveX的安全性
537 打包一个简单的ActiveX控件
538 使用向导创建一个ActiveX控件
539 理解“创建自定义接口成员”对话框
540 设置属性
541 完成向导
542 开始创建ActiveX控件
543 增强控件的功能
544 测试控件
545 理解ActiveX控件事件
546 理解ActiveX控件的生命周期
547 对非生命周期事件的响应
548 理解RaiseEvent语句
549 使用Event语句
550 给控件添加功能
551 执行ColorfulCmdButton控件的容器
552 理解属性页向导
553 使用属性页向导
554 创建一个ActiveX文档
555 为自己的ActiveX文档指定容器
556 发现目标应用程序的对象模型
557 理解对象模型中的变化
558 理解UserDocument对象
559 使用UserDocument对象
560 测试ActiveX文档
561 调试FirstACXDoc的ActiveX文档
562 向工程中添加第二个ActiveX文档
563 为ActiveX DLL文件创建类
564 为MyTest类创建属性和方法
565 初始化类
566 创建TestMyTest工程
567 实例化MyTest类
568 执行MyTestDemo工程
569 向MyTest类中添加SelfAbsorbed属性.
570 理解循环引用
571 理解ActiveX组件的命名原则
572 理解行为良好的组件
573 对VBScript中事件的响应
574 执行Hello.HTML文件
575 在VBScript中执行数学函数
576 执行事件和操作
577 使用VBScript的Option Explicit
578 使用VBScript的Dim
579 在一个HTML页中使用Label控件和Timer控件
580 引用ActiveX控件
581 使用注册表编辑器来寻找Class IP
582 在HTML文件中使用WebBrowser控件
583 Active Server Pages
584 在ASP中响应和请求
585 使用Querystring参数
586 格式化的一个捷径
587 回退
588 理解.INI文件
589 使用文件的Wn'tePrivateProfileStringAPI.
590 使用.ini文件的GetPrivateProfileSa'ingAP!.
591 使用.ini文件的GetPrivateProfileInt API
592 理解System Regis仃y
593 理解SaveSeaing函数
594 理解GetSetting成员函数
595 使用SaveSeaing和GetSetting语句
596 在注册表中保存窗体的大小和位置
597 在注册表中进行程序之间的变量传递
598 使用DeleteSetting函数
599 使用GetAllSettings函数
600 使用注册表的API函数
601 理解RegOpenKeyEx API函数
602 理解RegQueryV~ueEx函数
603 理解RegCloseKey函数
604 当打开窗体时使用API函数
605 理解RegCreateKeyEx函数
606 理解RegSetValueEx函数
607 使用RegSetValueEx和RegCreateValueEx
608 捕获注册表错误
609 使用API函数删除键和值
610 访问注册表
611 理解条件编译
612 理解#Const语句
613 理解#If-Then-#Else
614 使用条件编译
615 理解GetWindowsDirectory API函数
616 理解GetSystemDirectory API函数
617 使用GetWindow函数
618 得到窗口的名字
619 理解Visual Basic的安装向导
620 选择发布媒介
621 确保所有文件都包含在发布列表中
622 保存安装模板产生发布媒体
623 在用户的计算机上安装程序
624 创建Interact发布
625 使用应用程序向导产生标准窗体
626 理解Splash Screen
627 理解About对话框
628 使用向导添加数据库窗体
629 理解Crystal Reports
630 使用Crystal Reports
631 为报表选择数据源
632 在报表中添加字段
633 报表中的记录分组
634 Totaling and Counting分组字段
635 选择记录及风格化报表
636 修改报表
637 移动、改变大小、格式化以及删除字段
638 改变报表中数据的排列顺序
639 校正排列和分组次序
640 创建定制组
641 使用Summarized Totaled字段
642 插入小结
643 插入汇总
644 插入总结
645 选择记录
646 返回组中前N个记录
647 创建公式
648 在报表中加入图形/图表
649 在报表中插入OLE或Activex对象
650 添加或修改表头
651 理解Crystal Report引擎
652 理解Crystal ActiveX控件
653 使用Crystal ActiveX控件
654 理解Crystal窗口上的图标
655 Crystal Reports控件的局限性
656 重新考虑对象模型
657 理解外接程序
658 创建一个外接程序
659 访问扩展模型
660 创建工程的组件
661 理解IDTExtensibility接口
662 理解OnConnection函数
663 深入浅出OnConnection代码
664 理解AddToAddInCommandBar函数
665 自定义Connect模块
666 添加最后的组件
667 完成外接程序设计
668 装载外接程序
669 外接程序的疑难解答
670 理解ActiveX ExE
671 区分进程外和进程内组件
672 理解线程
673 理解异步处理
674 理解使用事件的异步通知
675 理解使用回调方法的异步通知
676 在多客户中使用回调
677 选择基于事件的通知还是基于回调的通知
678 理解类型库
679 理解默认接口
680 重新考虑GUID
681 理解版本兼容
682 创建ActiveX EXE
683 理解进程外组件的模态
684 开始创建测试工程
685 在测试工程中加入代码
686 查看有模态的Tes心om
687 查看无模态的Tes心om
688 使用异步通知
689 完成事件通知代码
690 编写客户程序
691 考虑如何处理多客户
692 使用Connector对象
693 认识到Connector中的错误
694 使用异步回调方法
695 创建LunchTimeMonitor可执行程序
696 理解单线程
697 有序开发ActiveX组件
698 重新考虑多线程
699 理解套间模式线程
700 理解重进入
701 理解二进制兼容性
702 避免版本树
703 避免版本兼容消息

已确认勘误

次印刷

页码 勘误内容 提交人 修订印次

1001 Microsoft Visual Basic Programming Tips
    • 名称
    • 类型
    • 大小

    联系方式: 020-38250260    客服QQ:4006604884

    意见反馈

    14:15

    关闭

    云图客服:

    尊敬的用户,您好!您有任何提议或者建议都可以在此提出来,我们会谦虚地接受任何意见。

    或者您是想咨询:

    用户发送的提问,这种方式就需要有位在线客服来回答用户的问题,这种 就属于对话式的,问题是这种提问是否需要用户登录才能提问

    Video Player
    ×
    Audio Player
    ×
    pdf Player
    ×
    Current View

    看过该图书的还喜欢

    some pictures

    解忧杂货店

    东野圭吾 (作者), 李盈春 (译者)

    loading icon